Использование 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

Связанный контент