동적으로 변경되는 열 위치 처리 및 파일 분할

동적으로 변경되는 열 위치 처리 및 파일 분할

나에게는 독특한 문제가 있다. 다음 열이 포함된 파일이 있습니다.

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)

관련 정보