두 번째 파일의 정보를 기반으로 파일의 특정 열을 어떻게 삭제합니까?

두 번째 파일의 정보를 기반으로 파일의 특정 열을 어떻게 삭제합니까?

다음과 같은 두 개의 파일이 있습니다.

file1:

1 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2

그리고

file2: 
1 567 1002 1009

이 파일들을 수직으로 연결하고 싶습니다. 즉, 출력에는 file1첫 번째 행의 값이 다음과 같은 열만 ​​포함되어야 합니다 file2.

산출:

1 567 1002 1009
1 1 0 1
0 0 2 2
1 2 2 2

어떤 제안이 있으십니까?

답변1

그리고 awk:

awk '
NR==FNR{for(i=1;i<=NF;i++){values[$i]};next}
FNR==1{for(i=1;i<=NF;i++){if ($i in values){nf[i]}}}
{sp=""; for(i=1;i<=NF;i++){if (i in nf){printf("%s%s",sp,$i);sp=" "}}}{print ""}
' file2 file1

먼저 읽고 file2각 값을 배열에 저장한 values다음 처리합니다 file1. 첫 번째 줄에서 어떤 필드가 공개인지 확인하고 해당 필드 번호를 다른 배열에 저장한 다음 nf참조로 사용합니다. 선택적으로 해당 열을 인쇄합니다.

답변2

온라인 사용자가 작업을 수행하는 경우:

cut -d' ' -f $(
    echo $(
        head -1 file1 | tr ' ' '\n' |
        grep -nxf <(tr ' ' '\n' <file2) |
        cut -d: -f1
        ) |
    tr ' ' ','
) file1

또는토르의 코멘트

cut -d' ' -f $(
    head -1 file1 | tr ' ' '\n' |
    grep -nxf <(tr ' ' '\n' <file2) |
    cut -d: -f1 | 
    paste -sd ,
) file1

관련 정보