簡體   English   中英

使用 awk 命令進行 Vlookup

[英]Vlookup using awk command

我的 linux 服務器中有兩個文件。

文件 1

9190784
9197256
9170546
9184139
9196854

檔案 2

S NO.,Column1,Column2,Column3
72070,9196854,TGM,AP
72071,9172071,BGM,MP
72072,9184139,AGM,KN
72073,9172073,TGM,AP

我想使用 awk 命令在 bash 中編寫腳本或單行命令,因此無論文件 -1 中的元素應該與文件 -2 中的第 1 列匹配並打印第 1 列、第 2 列和第 3 列。 此外,如果未找到任何條目,則應從文件 1 打印條目並在第 2 列和第 3 列中打印 NA

輸出:它應該將輸出重定向到一個新文件,如下所示。 新文件

9190784,TGM,AP
9197256,NA,NA
9170546,NA,NA
9184139,AGM,KN
9196854,TGM,AP

我希望查詢是可以理解的。 任何人都請幫助我。

awk標准連接操作

$ awk 'BEGIN   {FS=OFS=","} 
       NR==FNR {a[$2]=$3 OFS $4; next} 
               {print $1, (($1 in a)?a[$1]:"NA" OFS "NA")} file2 file1

子串變化(未測試)

$ awk 'BEGIN   {FS=OFS=","} 
       NR==FNR {a[substr($2,1,7)]=$3 OFS $4; next} 
               {key=substr($1,1,7);
                print $1, ((key in a)?a[key]:"NA" OFS "NA")} file2 file1

它必須是awk嗎? 它是通過 join 完成的:

有兩個文件:

echo '9190784
9197256
9170546
9184139
9196854' >file2

echo 'S NO.,Column1,Column2,Column3
72070,9196854,TGM,AP
72071,9172071,BGM,MP
72072,9184139,AGM,KN
72073,9172073,TGM,AP' > file1

可以加入 on ,作為第一個 file1 -12第二個字段的分隔符,刪除第一個標題行tail -n +2並使用第二個字段sort -t, -k2與第二個文件中的第一個字段進行sort -t, -k2 -21排序sort

join -t, -12 -21 -o1.2,1.3,1.4 <(tail -n +2 file1 | sort -t, -k2) <(sort file2)

將輸出:

9184139,AGM,KN
9196854,TGM,AP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM