![텍스트 파일의 문자열 목록에 제공된 문자열 줄을 제거하기 위해 sed를 반복합니다.](https://linux55.com/image/120545/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%AA%A9%EB%A1%9D%EC%97%90%20%EC%A0%9C%EA%B3%B5%EB%90%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%A4%84%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20sed%EB%A5%BC%20%EB%B0%98%EB%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
텍스트 파일에 나열된 종이 내 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