Grep
根據前綴從文件中提取行
我需要從 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
: 創建一個由(fromfile1
)索引的數組元素$1 in a
:檢查正在讀取的每一行是否file2
作為數組中的索引存在a
執行此操作的 bash 程式碼:
for i in $(cat file1); do egrep "^$i\s" file2; done