파일에서 특정 열을 추출하고 싶습니다. 열 번호는 쉘 스크립트를 사용하여 다른 파일에 제공됩니까?

파일에서 특정 열을 추출하고 싶습니다. 열 번호는 쉘 스크립트를 사용하여 다른 파일에 제공됩니까?

file1에서 추출해야 하는 열 번호를 제공하는 file2와 비교하여 file1에서 특정 열을 추출하고 싶습니다.

파일 1(소스 데이터)은 다음과 같습니다.

  1  2  3  4  5 10 11 14  
  13 25 37 2 4 7  9 23  
  12  12 23 15 17 18 24 25

파일 2(추출할 열 번호 포함):

  2  
  4  
  5

그래서 file1과 file2를 비교하고 싶습니다. 파일 2를 사용하여 파일 1에서 열 번호 2,4,5를 추출하고 싶습니다.

원하는 출력:

  2 4 5  
  25 2 4  
  12 15 17  

어떻게 진행하나요?

답변1

또한 시도

awk '
FNR == NR       {COL[NR] = $1                   # get column numbers from file2
                 MX = NR                        # retain max line No. in file2
                 next
                }
                {for (i=1; i<=MX; i++)  printf "%s%s", $(COL[i]), (i==MX)?ORS:OFS
                                                # print those columns, and field
                                                # or line separator
                }
' file2 file1
2 4 5
25 2 4
12 15 17

답변2

그리고 Perl:

perl -pale '$"="\t";
   chomp(@A = map { $_-1 } grep { /^[1-9]\d*$/m } <STDIN>) if $. == 1;
   $_ = @A ? "@F[@A]" : last;
' File1 < File2

결과:

2   4   5
25  2   4
12  15  17

설명하다:

Perl 유틸리티에 stdin의 열 번호 파일(한 줄에 하나의 열 번호)을 제공하고 Perl 명령줄에 데이터 파일을 제공합니다.

배열 요소 커넥터 설정($")를 a로 TAB변경하여 모든 출력 필드가 탭으로 구분되도록 합니다.

인쇄할 열 배열이 @A비어 있음을 감지하면 즉시 프로그램을 종료하십시오. File2행당 양의 정수가 있는 행만 포함됩니다 . 다른 조합은 거부됩니다.

관련 정보