我有一個數據文件,其中包含單個區域,然後包含不同數量的城市/城鎮,如下所示;-
South,London,Guildford,Winchester
North,Manchester,Leeds
East,Norwich
我需要使用 AWK 產生這樣的輸出
South,London
South,Guildford,
South,Winchester
North,Manchester etc
僅當存在城市/城鎮時才必須循環。
答案1
$ awk -F ',' 'BEGIN { OFS=FS } { for (i=2; i<=NF; ++i) print $1, $i }' file
South,London
South,Guildford
South,Winchester
North,Manchester
North,Leeds
East,Norwich
程式awk
只是從第二個字段開始循環遍歷每行的逗號分隔字段,並將每個字段與同一行上的第一個字段一起輸出。
該BEGIN
區塊只是將輸出欄位分隔符號設定為與輸入欄位分隔符號相同。
如果您的輸入資料採用「簡單 CSV」格式,即以逗號分隔且沒有任何欄位嵌入逗號或換行符,則此方法有效。
答案2
我已經按照下面的方法完成了並且效果很好
line_count=`awk '{print NR}' p.txt | sort -rn| sed -n '1p'`
for ((i=1;i<=$line_count;i++)); do No_of_columns=`awk -v i="$i" -F "," 'NR==i{print NF}' p.txt`; value=`awk -v i="$i" -F "," 'NR==i{print $1}' p.txt`; colum_count=`awk -v i="$i" -F "," 'NR==i {print NF}' p.txt`; for ((d=2;d<=$colum_count;d++)); do awk -v i="$i" -v value="$value" -v d="$d" -F "," 'NR==i{print value","$d}' p.txt; done; done
輸出
South,London
South,Guildford
South,Winchester
North,Manchester
North,Leeds
East,Norwich