
cat file_1.txt
100 200 name
100 200
100 200
150 300
150 300
150 250
150 250
150 300 name
final file should be
150 300
150 300
150 250
150 250
我正在使用這個命令
cat file_1.txt | grep -v "name">file_2.txt; cat file_2.txt| while read line;do cat file_1.txt| grep "$line"| head -1|grep -v "name" ;done
但資料太多,無法使用 while 循環,它需要花費很多時間 cat 使用 while 循環。有沒有其他方法可以快速做到這"grep -vf file_1 file_2"
一點,例如使用類似的方法透過這樣的方式。請告訴我。
在這裡,我使用的邏輯是取得模式的最上面一行,發現模式是每一行"file_1.txt"
答案1
在我看來,您的程式碼正在列印 file_1.txt 的每一行,除非(a)該行包含name
或(b)該行的前兩列與包含 的前一行相同name
。在這種情況下,請嘗試:
$ awk '/name/{bad[$1,$2];next} !(($1,$2) in bad)' file_1.txt
150 300
150 300
150 250
150 250
怎麼運作的
/name/{bad[$1,$2];next}
如果當前行包含,則我們在前兩列的鍵下
name
向關聯數組新增一個條目。bad
然後我們跳過其餘的命令並跳到線上重新開始next
。!(($1,$2) in bad)
如果目前行的前兩列
$1,$2
是不是的鍵中bad
,然後列印這一行。