Awk

嘗試使用 AWK 根據另一個文件從一個文件中查找完整的字元串值

  • July 27, 2022

您好,我有 2 個文件,第一個文件包含一些值,例如

powershell
vectormaps
JuniperSA

以及包含值和 ID 的第二個文件

appid uid
SplunkforSnort 340
powershell 610
vectormaps 729
JuniperSA 826
postfix 933
SplunkforJuniperSRX 929
TA-barracuda_webfilter 952
TA-dragon-ips 954
dhcpd 392

所以我試圖用AWK執行一個while循環來獲取值和它們對應的ID,但輸出文件似乎在寫別的東西。這就是我嘗試執行while循環的方式。

while read $line;
do
awk '/'$line'/ {print $0}' file2.csv > new
done < file1

我的預期輸出應該是

powershell 610
vectormaps 729
JuniperSA 826

但我的輸出是

appid uid
SplunkforSnort 340
powershell 610
vectormaps 729
JuniperSA 826
postfix 933
SplunkforJuniperSRX 929
TA-barracuda_webfilter 952
TA-dragon-ips 954
dhcpd 392

似乎什麼都沒有發生。我在這裡想念什麼?

使用awk

$ awk 'FNR==NR {a[$1]=$2; next} {$(NF+1)=a[$1]}1' file2 file1
powershell 610
vectormaps 729
JuniperSA 826

如前所述,沒有理由使用while循環或awk不管文件可能變得多麼複雜。您只是想在第二個文件中列印包含第一個文件中的字元串的行。最好使用 KISS 方法,而不是在不必要的地方復雜化。

以下將做你想要的:

grep -f file1 file2.csv

引用自:https://unix.stackexchange.com/questions/711456