对数组使用 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

相关内容