Shell-Script
搜尋一列的值並從文件的其他列檢索連接的值
我有一個包含 4 列的文本文件,數據如下所示:
P_ID C_ID Code MSG 10 12 001 abcd 20 21 003 jklm 10 12 002 hijk
這裡 P_ID、C_ID、Code 和 MSG 是列。
需要對列 C_ID 進行搜尋,如果相同 C_ID 值有多個條目但具有不同的 code 和 MSG 列值,則最終文件應具有如下預期輸出文件所示的結果,其中 code 和 msg 列值是用逗號連接在一行中。
預期的輸出應該是這樣的:
P_ID C_ID Code MSG 10 12 001,002 abcd,hijk 20 21 003 jklm
以下是輸出:
1: NF=4 $1=[P_ID] $2=[C_ID] $3=[Code] $4=[MSG] 2: NF=4 $1=[10] $2=[12] $3=[001] $4=[abcd] 3: NF=4 $1=[20] $2=[21] $3=[003] $4=[jklm] 4: NF=4 $1=[10] $2=[12] $3=[002] $4=[hijk]
第一個答案中提供的解決方案的輸出是:
P_ID C_ID Code MSG 10 12 001 abcd 20 21 003 jklm 10 12 002 hijk
用於檢查列名和相應數據的 awk 命令工作正常,但是作為答案提供的第一個命令沒有給出預期的結果。
當問題得到澄清時,這可能需要細化,但是,基於其目前狀態,
awk ' BEGIN { unique_vals = 0 } NR == 1 { print } NR > 1 { if (seen[$2] == "") { i = seen[$2] = unique_vals++ P_ID[i] = $1 C_ID[i] = $2 Code[i] = $3 MSG[i] = $4 } else { i = seen[$2] Code[i] = Code[i] "," $3 MSG[i] = MSG[i] "," $4 } } END { for (i=0; i<unique_vals; i++) { printf "%-15s%-11s%-15s%s\n", P_ID[i], C_ID[i], Code[i], MSG[i] } } ' file
似乎完成了這項工作。
好的,我假設您知道如何執行
awk
. 如果你不這樣做,就這麼說。如果這樣做,請執行此調試腳本:awk ' { print NR ": NF=" NF print " $1=[" $1 "]" print " $2=[" $2 "]" print " $3=[" $3 "]" print " $4=[" $4 "]" } ' file
在您的輸入文件上並在您的問題中發布輸出。(請使用`````“程式碼圍欄”。)然後在這裡發表另一條評論,讓我知道你已經這樣做了。