나에게는 독특한 문제가 있다. 다음 열이 포함된 파일이 있습니다.
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
)