以下に示すように、単一の地域とさまざまな都市/村を含むデータファイルがあります。
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
単に2番目のフィールドから始まり、各行のカンマ区切りフィールドを繰り返し、同じ行の最初のフィールドと共に各フィールドを出力します。
この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