다음과 같은 두 개의 파일이 있습니다.
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