"결합"에서 필드 순서 유지

"결합"에서 필드 순서 유지

다음과 같은 두 개의 파일이 있다고 가정해 보겠습니다.

1   a   one ...
2   b   two ...
3   c   three   ...
4   d   four    ...
5   e   five    ...
6   f   six ...

그리고

a
c
f

어떤 방법이 있나요?파일 1의 열 수를 모릅니다.(또는 각 필드를 반복하는 대신) 조인을 사용하여 일치하는 행을 얻을 수 있습니다.

1   a   one ...
3   c   three   ...
6   f   six ...

나는 노력했다

join -1 2 -o 1.0 file1 file2

당신이 쓴 것처럼 $0모든 필드를 얻으십시오. awk그러나 나는 분명히 그것을 얻습니다 invalid field number.

답변1

순서대로 인쇄할 필드를 선택하거나 모든 필드를 기본 순서로 인쇄할 수 있습니다. 그러나 "나머지 필드"는 인쇄할 수 없습니다.

에서 man join:

-o FORMAT
       obey FORMAT while constructing output line
[...]
Any FIELD is a field number counted from 1. FORMAT is one or
more  comma or blank separated specifications, each being
'FILENUM.FIELD' or '0'.

awk를 사용할 수 있습니다.

awk -v regex="$(head -c -1 file2 | tr '\n' '|')" '$2 ~ regex' file1
  • file2의 마지막 개행 문자를 제거하고 개행 문자를 "|"로 바꾸면 정규식은 다음과 같습니다.a|c|f
  • file1의 두 번째 필드를 이 정규식과 일치시킵니다.

또는 특히 file2에 특수 문자가 포함된 경우 Sundeep의 awk 솔루션을 사용하십시오.

답변2

귀하의 경우 처음 두 필드를 바꿀 수 있습니다.

| awk '{swap=$1;$1=$2;$2=swap;print $0}' 

관련 정보