텍스트 파일에 나열된 종이 내 OTU 테이블에서 발견되면 OTU 테이블의 전체 행을 삭제하기 위해 이 sed 스크립트를 사용하고 있습니다.
현재 작동하지 않는 스크립트는 아래에 있지만 작동하게 할 수는 없습니다. 어쨌든, 가능한 한 빨리 도와주시면 정말 감사하겠습니다.
(각 행을 읽고 내 테이블에서 검색한 후 행 삭제, infile)
for i in $(cat /my/path/species.txt); do
sed -i '/"$i"/d' /my/path/ITS.OTU.table.tsv
done
매우 감사합니다
답변1
grep -v -xF -f /my/path/species.txt /my/path/ITS.OTU.table.tsv >/my/path/ITS.OTU.table.tsv.new
이렇게 하면 쓸 수 있습니다 /my/path/ITS.OTU.table.tsv.new
. 그 내용은 원본 파일과 동일합니다 /my/path/species.txt
.
이 -xF
옵션은 동일한 문자열의 전체 행 일치를 강제하고 -f filename
지정된 파일에서 일치하는 행을 읽습니다. -v
일치의 의미를 뒤집어서 줄만 남게 합니다.아니요일치하면 반환됩니다.
/my/path/species.txt
읽은 문자열이 일치할 수 있도록 일치를 완화해야 하는 경우어딘가에각 줄에서 옵션 /my/path/ITS.OTU.table.tsv
을 제거하십시오 -x
.
각 행에서 일치 항목을 테스트해야 하는 위치를 알고 있다면 awk
해당 데이터 비트를 비교할 수 있지만 현재는 데이터가 어떻게 보이는지 알 수 없습니다.
답변2
이것은 귀하의 스크립트입니다:
while read -r line
do
echo $line
sed -i "/$line/d" /my/path/ITS.OTU.table.tsv
done < /my/path/species.txt
echo $line은 디버깅상의 이유로 더 많았으므로 결국 제거했습니다.
답변3
MacOS/BSD/Solaris와 같은 Unix의 경우 Emilie가 겪었던 문제를 피하기 위해 빈 문자열을 전달해야 하므로 sed
대답은 다음과 같습니다.
while read -r line
do
echo $line
sed -i "" "/$line/d" /my/path/ITS.OTU.table.tsv
done < /my/path/species.txt