![동적으로 변경되는 열 위치 처리 및 파일 분할](https://linux55.com/image/41650/%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%EB%90%98%EB%8A%94%20%EC%97%B4%20%EC%9C%84%EC%B9%98%20%EC%B2%98%EB%A6%AC%20%EB%B0%8F%20%ED%8C%8C%EC%9D%BC%20%EB%B6%84%ED%95%A0.png)
나에게는 독특한 문제가 있다. 다음 열이 포함된 파일이 있습니다.
PersonId, AB1, AB2, AB3, DG1_B1,DG1_B2,DG2
1,0,1,0,3,5,7
2,0,3,1,3,7,4
나는 그것을 분할하고 열 접두사를 기반으로 여러 파일을 만들고 싶습니다. 출력이 다음과 같기를 원합니다.
File_AB1.csv
PersonId, AB1, AB2, AB3 1,0,1,0 2,0,3,1
File_DG1.csv
PersonId, DG1_B1,DG1_B2 1,3,5 2,3,7
File_DG2.csv
PersonId, DG2 1,7 2,4
이 파일에는 또 다른 문제가 있습니다. 다음에 입력 파일을 가져오면 아래와 같이 열 순서가 변경될 수 있습니다(AB3 열은 줄 끝으로 이동됩니다).
PersonId, AB1, AB2,DG1_B1,DG1_B2,DG2,AB3
1,0,1,3,5,7,0
2,0,3,3,7,4,1
awk에서 이 작업을 어떻게 수행할 수 있나요?
답변1
다음을 수행할 수 있습니다.
awk -F, '
NR == 1 {
for (i = 2; i <= NF; i++)
if (match($i, /AB|DG./))
file_list[file[i] = "file_" substr($i, RSTART, RLENGTH) ".csv"]
}
{
for (f in file_list) printf "%s", $1 > f
for (i = 2; i <= NF; i++) printf ",%s", $i > file[i]
for (f in file_list) print "" > f
}'
file_AB.csv
( 대신 접두사를 기반으로 파일을 호출합니다 file_AB1.csv
)