カンマで区切られた文字列を含む2つのファイルがありますfile1.txt
。
1.1.1.1,string1,comment1
7.7.7.7,string3,comment3
2.2.2.2,string2,comment2
88.88.88.88,string4,comment4
999.999,999,999,string5,comment5
2番目のファイルには、file2.txt
最初の列に表示できる文字列が含まれていますfile1.txt
。file1.txt
最初の列の文字列がに表示されたら、行全体を削除する必要がありますfile2.txt
。元のファイルを変更したくありませんが、出力を新しいファイルに入れたいです。
答え1
なぜ簡単ではないのですか?
grep -vffile2 file1
-f FILE: Obtain patterns from FILE, one per line. -v: Invert the sense of matching, to select non-matching lines.
答え2
次のことを試してみてください。
#!/bin/bash
cat file2.txt | while IFS=, read line; do
sed -i "/$(grep $line file1.txt)/d" file1.txt
done
これにより、file1.txtが直接変更されますが、元のファイルのバックアップコピーを保存するsed -i
ようにコマンドを変更できます。sed -i.ibk
例えば
$cat file2.txt
1.1.1.1
7.7.7.7
$cat file1.txt
1.1.1.1,string1,comment1
7.7.7.7,string3,comment3
2.2.2.2,string2,comment2
88.88.88.88,string4,comment4
999.999,999,999,string5,comment5
output
2.2.2.2,string2,comment2
88.88.88.88,string4,comment4
999.999,999,999,string5,comment5