Usando AWK para una matriz

Usando AWK para una matriz

Tengo un archivo de datos que contiene una sola región y luego un número variable de ciudades/pueblos de la siguiente manera;-

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

Necesito producir una salida como esta usando AWK

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

Debe circular solo cuando hay una ciudad/pueblo presente.

Respuesta1

$ 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

Los awkprogramas simplemente recorre los campos delimitados por comas de cada línea, desde el campo dos en adelante, y genera cada campo junto con el primer campo en la misma línea.

El BEGINbloque simplemente establece el delimitador del campo de salida al mismo que el delimitador del campo de entrada.

Esto funcionaría si sus datos de entrada están en un formato "CSV simple", es decir, si están delimitados por comas y si ninguno de los campos tiene comas o nuevas líneas incrustadas.

Respuesta2

Lo hice con el siguiente método y funcionó bien.

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

producción

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

información relacionada