배열과 함께 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

관련 정보