我有一個如下所示的檔案
1234|A|B|C|10|11|12
2345|F|G|H|13|14|15
3456|K|L|M|16|17|18
我希望輸出為
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
我已嘗試使用以下腳本。
awk -F"|" '{print $1","$2","$3","$4"}' file.dat | awk -F"," '{OFS=RS;$1=$1}1'
但輸出生成如下。
1234
A
B
C
2345
F
G
H
3456
K
L
M
任何幫助表示贊賞。
uj5u.com熱心網友回復:
像這樣一個簡單的 awk 行程怎么樣:
$ awk -F\| '{print $1 "|" $2 "\n" $1 "|" $3 "\n" $1 "|" $4}' file.dat
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
沒有搞亂 RS 和 OFS。
uj5u.com熱心網友回復:
如果要動態執行此操作,則可以傳入所需的欄位數,然后使用從第二個欄位開始的回圈。
在腳本中,您可能首先檢查欄位數是否等于或大于您傳遞給腳本的數字(在本例中 n=4)
awk -F\| -v n=4 '
NF >= n {
for(i=2; i<=n; i ) print $1 "|" $i
}
' file
輸出
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
uj5u.com熱心網友回復:
# perl -lne'($a,@b)=((split/\|/)[0..3]);foreach (@b){print join"|",$a,$_}' file.dat
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521126.html
標籤:Unixawk转置
下一篇:使用正則運算式字串提取單詞
