我需要的意義在以下UNIX代碼,並幫助我前進..
`awk -F "|" '{!a[$1]++}{printf RS $1}{print FS $2}' input.txt`
我的樣品I/p文件就像下面
1|Balaji 1|Kumar 3|India 3|China 3|Australia 1|Dinesh
我需要O/p像下面
1|Balaji|Kumar|Dinesh 3|India|China|Australia
我需要的意義在以下UNIX代碼,並幫助我前進..
`awk -F "|" '{!a[$1]++}{printf RS $1}{print FS $2}' input.txt`
我的樣品I/p文件就像下面
1|Balaji 1|Kumar 3|India 3|China 3|Australia 1|Dinesh
我需要O/p像下面
1|Balaji|Kumar|Dinesh 3|India|China|Australia
出人意料的是,它可以改變簡單。我不知道爲什麼[$ 1] ++裏面是寫that.Its過時overe有:
awk -F "|" '{printf RS $1}{print FS $2}' input.txt
它會先打印記錄分隔符是換行,然後1 $這是第一場,然後字段分隔符是「|」然後是第二個字段$ 2,然後是換行符(因爲語句是打印的,如果使用printf,則不會打印換行符)。
基於您的評論,下面應該工作:
awk '{
for(i=1;i<=NF;i++){split($i,a,"|");
b[a[1]]?b[a[1]]=b[a[1]]" "a[2]:b[a[1]]=a[2]
}
for(j in b)printf j"|"b[j]" ";
print"";}' your_file
我的樣本I/P文件就像下面 1 |巴拉吉 1 |庫馬爾 3 |印度 3 |中國 3 |澳大利亞 1 |迪內希 我需要的O/P像下面 1 |巴拉吉|庫馬爾| Dinesh 3 |印度|中國|澳大利亞 – Balaji
在你的問題我就不解釋awk的線。因爲它沒有多大意義:
嘗試這一個班輪:
awk -F'[| ]' '{for(i=1;i<=NF;i++)if(i%2)a[$i]=a[$i]?a[$i]"|"$(i+1):$(i+1)}
END{for(x in a) printf x"|"a[x]" ";print ""}' file
用你的例子:
kent$ echo "1|Balaji 1|Kumar 3|India 3|China 3|Australia 1|Dinesh"|awk -F'[| ]' '{for(i=1;i<=NF;i++)if(i%2)a[$i]=a[$i]?a[$i]"|"$(i+1):$(i+1)}END{for(x in a) printf x"|"a[x]" ";print ""}'
1|Balaji|Kumar|Dinesh 3|India|China|Australia
請注意,會有一個結束空間,它可以在END循環中刪除。
更改記錄選擇器可以輕鬆讀取此數據。它只有一個小錯誤,我沒有看到如何解決,它打印在兩行。
awk -F\| '{a[$1]=a[$1]?a[$1]"|"$2:$2} END{for(i in a) printf i"|"a[i]" "}' RS=" " file
1|Balaji|Kumar|Dinesh
3|India|China|Australia
新版本正確的輸出,得益於Birei
awk -F\| '{sub(/\n/,x, $0); a[$1]=a[$1]?a[$1]"|"$2:$2} END{for(i in a) printf i"|"a[i]" "}' RS=" "
1|Balaji|Kumar|Dinesh 3|India|China|Australia
我認爲這些名稱可以有空格。我對嗎?另外,你是否堅持使用'awk'或者你會接受更強大的語言,比如'perl'或'python'? – Birei
爲什麼?你說什麼你想輸出給定的輸入,但不知道爲什麼Dinesh得到了3後,庫馬爾從中取出3等,我們只是猜測,可以給你一個完全不適當的答案,產生該具體輸出輸入,但在一般情況下是錯誤的。順便說一句,你發佈的awk腳本只是無稽之談,所以沒有必要解釋它。 –