Linux
如何通過輸入文件從文本文件中刪除列中具有特定值的行?
我有一個管道分隔文件,如下所示。
數據.txt
ESP|041336|46566|NY|CA ESP|041337|46566|NY|CA ESP|041338|46566|NY|CA ESP|041339|46566|NY|CA ESP|041340|46566|NY|CA ESP|041341|46566|NY|CA
我有另一個文件,其中第二列中的值需要刪除。
輸入.txt
041337 041338 041339
我正在嘗試從 input.txt 的第二列中刪除具有值的行。
預期產出
ESP|041336|46566|NY|CA ESP|041340|46566|NY|CA ESP|041341|46566|NY|CA
我試圖在下面使用 grep 來實現這一點。
grep -vfw input.txt data.txt > output.txt
這不會刪除列,但會引發錯誤 No such file or directory 並返回一個空文件。
如果您只想將比較限制為第二個分隔欄位,則可以使用 awk 而不是 grep:
$ awk -F'|' 'NR==FNR {a[$1]++; next} !($2 in a)' input.txt data.txt > output.txt $ cat output.txt ESP|041336|46566|NY|CA ESP|041340|46566|NY|CA ESP|041341|46566|NY|CA
該選項
-f
需要一個文件名。按照你的寫法,文件名是f
, in後面的文本-vfw
,換句話說就是w
.您必須在最後放置一個帶有參數的選項(除了
tar
,它使用奇怪的選項解析)。這些中的任何一個都應該起作用。
grep -v -w -f input.txt data.txt > output.txt grep -vwf input.txt data.txt > output.txt grep -vwfinput.txt data.txt > output.txt
注意:確切的錯誤消息,當您提出問題時應始終完整引用,提及名稱
w
。grep:
w
: 沒有這樣的文件或目錄