다음과 같은 두 개의 파일이 있다고 가정해 보겠습니다.
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}'