Usando AWK para um array

Usando AWK para um array

Eu tenho um arquivo de dados que contém uma única região e, em seguida, um número variável de cidades/vilas, como segue;-

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

Preciso produzir uma saída como esta usando AWK

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

Ele deve percorrer somente quando houver uma cidade/município presente.

Responder1

$ 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

Os awkprogramas simplesmente percorrem os campos delimitados por vírgulas de cada linha, do campo dois em diante, e geram cada campo junto com o primeiro campo na mesma linha.

O BEGINbloco apenas define o delimitador do campo de saída igual ao delimitador do campo de entrada.

Isso funcionaria se seus dados de entrada estivessem em um formato "CSV simples", ou seja, se fossem delimitados por vírgulas e se nenhum dos campos tivesse vírgulas ou novas linhas incorporadas.

Responder2

Eu fiz o método abaixo e funcionou bem

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

saída

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

informação relacionada