我有一个数据文件,其中包含单个区域,然后包含不同数量的城市/城镇,如下所示;-
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