Grep

根據前綴從文件中提取行

  • March 13, 2015

我需要從 file2 中提取所有以 file1 中包含的 id # 前綴開頭的行。

文件 1 是單列,如:

324
399
408
135236
321590

文件 2 是多列,如:

1 [tab] 108 [tab] Anarchist [tab] 103985
...
324 [tab] 309 [tab] Melodies [tab] 230498

從 File2 中提取這些行的最快最簡單的方法是什麼?

$ while read p; do awk '$1 == "'$p'"' file2; done < file1

或者:

$ awk -F'\t' 'FNR==NR { a[$0]; next } $1 in a' file1 file2
  • FNR: 從目前正在處理的文件中讀取的記錄數
  • NR: 輸入記錄總數
  • FNR==NR``awk: 只有在閱讀時才是真的file1
  • a[$0]``$0: 創建一個由(from file1)索引的數組元素
  • $1 in a:檢查正在讀取的每一行是否file2作為數組中的索引存在a

執行此操作的 bash 程式碼:

for i in $(cat file1); do egrep "^$i\s" file2; done

引用自:https://serverfault.com/questions/323984