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
각 배열 구성원을 새 줄에 넣기 만 하면 됩니다 . 그런 다음 쉼표를 구분 기호로 사용하여 paste
input.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
이는 배열 요소 내에 공백이 없는 한 작동합니다.