無法使用 while 循環,因為它需要時間,有沒有更快的方法來獲取最終文件..在 Linux

無法使用 while 循環,因為它需要時間,有沒有更快的方法來獲取最終文件..在 Linux
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,然後列印這一行。

相關內容