我正在用另一個檔案查詢一個檔案,并將它們如下所示:
檔案1:
Angela S Darvill| text text text text
Helen Stanley| text text text text
Carol Haigh S|text text text text .....
檔案2:
Carol Haigh
Helen Stanley
Angela Darvill
這個命令:
awk 'NR==FNR{_[$1];next} ($1 in _)' File2.txt File1.txt
回傳重疊的行,但沒有嚴格匹配。有嚴格的比賽,應該只有海倫斯坦利回來了。
你如何限制 awk 嚴格重疊?
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下操作。你在正確的軌道上,你需要做兩件事,第一:在讀取 file2.txt 時將整行作為陣列中的索引,并在開始讀取 file1之前a將欄位 seapeator 設定為|awk
awk -F'|' 'NR==FNR{a[$0];next} $1 in a' File2.txt File1.txt
上面的命令對我不起作用(我在 Mac 上,不知道是否重要),但是
awk 'NR==FNR{_[$0];next} ($1 in _)' File2.txt. FS="|" File1.txt
運作良好
uj5u.com熱心網友回復:
您還可以使用grep從 File2.txt 匹配作為正則運算式串列來進行精確匹配。
您可以使用它sed來準備比賽。這是一個例子:
sed -E 's/[ \t]*$//; s/^(.*)$/^\1|/' File2.txt
^Carol Haigh|
^Helen Stanley|
^Angela Darvill|
...
然后使用 processsed作為-f引數grep:
grep -f <(sed -E 's/[ \t]*$//; s/^(.*)$/^\1|/' File2.txt) File1.txt
Helen Stanley| text text text text
由于您的示例 File2.txt 有尾隨空格,因此sed具有s/[ \t]*$//;作為第一個替換。如果您的實際檔案沒有這些交易空間,您可以執行以下操作:
grep -f <(sed -E 's/.*/^&|/' File2.txt) File1.txt
Ed Morton 提出了一個很好的觀點,即 grep 仍然會在File2.txt. 您可以使用該標志-F,因此只使用文字字串:
grep -F -f <(sed -E 's/.*/&|/' File2.txt) File1.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426448.html
