Verwenden von AWK für ein Array

Verwenden von AWK für ein Array

Ich habe eine Datendatei, die eine einzelne Region und dann eine unterschiedliche Anzahl von Städten/Orten wie folgt enthält: -

South,London,Guildford,Winchester
North,Manchester,Leeds
East,Norwich

Ich muss eine Ausgabe wie diese mit AWK erzeugen

South,London
South,Guildford,
South,Winchester
North,Manchester etc

Die Schleife darf nur durchlaufen, wenn eine Stadt/ein Ort vorhanden ist.

Antwort1

$ 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

Das awkProgramm führt einfach eine Schleife über die durch Kommas getrennten Felder jeder Zeile ab Feld zwei aus und gibt jedes Feld zusammen mit dem ersten Feld in derselben Zeile aus.

Der BEGINBlock setzt einfach das Ausgabefeldtrennzeichen auf den gleichen Wert wie das Eingabefeldtrennzeichen.

Dies würde funktionieren, wenn Ihre Eingabedaten im „einfachen CSV“-Format vorliegen, d. h. wenn sie durch Kommas getrennt sind und wenn keines der Felder eingebettete Kommas oder Zeilenumbrüche enthält.

Antwort2

Ich habe es mit der unten stehenden Methode gemacht und es hat gut funktioniert

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

Ausgabe

South,London
South,Guildford
South,Winchester
North,Manchester
North,Leeds
East,Norwich

verwandte Informationen