對數組使用 AWK

對數組使用 AWK

我有一個數據文件,其中包含單個區域,然後包含不同數量​​的城市/城鎮,如下所示;-

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

相關內容