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
행당 양의 정수가 있는 행만 포함됩니다 . 다른 조합은 거부됩니다.