awk를 사용하여 CSV 파일에 열 추가

awk를 사용하여 CSV 파일에 열 추가

awk를 사용하여 배열의 CSV 파일에 열을 추가해야 합니다.

예를 들어,

input.csv

a,10
b,11

array = (100 200)

output.csv다음과 같아야합니다

a,10,100
b,11,200

이 명령을 시도했지만 작동하지 않습니다

awk -F"," 'BEGIN { OFS = "," } {for (x in array) $3=array[x]; print}' input.csv> output.csv

답변1

꼭 이걸 사용해야 하나요 awk? 이 paste유틸리티는 바로 이런 종류의 작업을 위해 설계되었습니다. array쉘 배열을 가정하면 다음과 같습니다 .

array=(100 200)
printf "%s\n" "${array[@]}" | paste -d, input.csv - > output.csv

printf각 배열 구성원을 새 줄에 넣기 만 하면 됩니다 . 그런 다음 쉼표를 구분 기호로 사용하여 pasteinput.csv의 입력 행과 -(즉, 파이프 출력 ) 함께 붙여넣습니다.printf


배열이 array.txt와 같이 개행으로 구분된 파일인 경우:

100
200

그러면 더 쉽습니다.

paste -d, input.csv array.txt > output.csv

답변2

문제는 셸 변수(배열 포함)가 에 있다는 것입니다 . 옵션을 통해 명시적으로 전달 awk해야 합니다 . -v또한 전체 배열을 전달할 수는 없지만 배열을 단일 변수에 넣고 내부에서 분할할 수 있습니다 awk.

awk -va="$(echo "${array[@]}")" 'BEGIN{OFS=FS=","; split(a,b," ")}{print $0,b[NR]}' input.csv

이는 배열 요소 내에 공백이 없는 한 작동합니다.

관련 정보