다음 형식의 파일이 두 개 있습니다.
파일 1:
air
smell
hand
dude
road
cat
파일 2:
air,4,21,01,13,3,2
smell,21,4,2,5,6
dude,1,31,42,1
road,1,4,2,1,4
cat,1,5,6,3,1
hand,1,4,2,1,6
mouse,1,3,5,6,2
내가 원하는 것은 파일 2의 열 1에 있는 첫 번째 문자열이 파일 1에 있는 경우 파일 2의 전체 줄을 인쇄하고 파일 1의 순서를 유지하고 싶습니다.
예상 출력:
air,4,21,01,13,3,2
smell,21,4,2,5,6
hand,1,4,2,1,6
dude,1,31,42,1
road,1,4,2,1,4
cat,1,5,6,3,1
답변1
이렇게 하면 트릭을 수행할 수 있습니다.
awk -F, 'FNR==NR {a[$1]; next}; $1 in a' file1 file2
편집하다:
잘못된 주문 문서에 대한 설명입니다. 새로운 시도( gawk
허용되는 경우 필수)
gawk -F, '
FNR==NR {a[NR]=$1; next};
{b[$1]=$0}
END{for (i in a) if (a[i] in b) print b[a[i]]}
' file1 file2
편집 2:
nowmal awk
및 스왑 파일을 사용하십시오.
awk -F, 'FNR==NR {a[$1]=$0; next}; $1 in a {print a[$1]}' file2 file1
답변2
join -t, -1 2 -2 1 <(nl -s, -ba -nrz file1 | sort -t, -k2) \
<(sort -t, -k1 file2) | sort -t, -k2 | cut -d, -f1,3-
의 행에는 file1
번호가 매겨지고 결과는 sort
두 번째 필드에서 편집됩니다. 그런 다음 다음 join
과 같이 편집합니다 file2
( sort
첫 번째 필드에서 편집).
air,000001,4,21,01,13,3,2
cat,000006,1,5,6,3,1
dude,000004,1,31,42,1
hand,000003,1,4,2,1,6
road,000005,1,4,2,1,4
smell,000002,21,4,2,5,6
그런 다음 sort
두 번째 필드(즉, 행 번호)의 결과를 편집하여 원래 행 순서를 복원한 다음 다음을 사용하여 동일한 두 번째 필드를 삭제합니다 cut
.
air,4,21,01,13,3,2
smell,21,4,2,5,6
hand,1,4,2,1,6
dude,1,31,42,1
road,1,4,2,1,4
cat,1,5,6,3,1
답변3
간단한 grep 명령을 사용할 수 있습니다.
grep -f file1 file2