a의 모든 행을 인쇄하는 간단한 방법이 있습니까 file1
(출력이 입력과 동일한 수의 행을 갖도록 ), file1의 첫 번째 항목이 file1의 첫 번째 항목과 일치하지 않는다는 file1
메시지를 인쇄합니까 ?NoMatch
file2
파일 1:
Entry1 Entry2
a 2
b 3
c 4
d 5
파일 2:
a
b
b
a
d
d
원하는 출력:
Entry1
a 2
b 3
NoMatch 4
d 5
나는 노력하고있다
join -a1 -e "NoMatch" -11 -21 -o2.1 file1 file2
file1
일치하지 않는 일치하지 않는 행을 유지 file2
하고 이러한 경우에 "아니요" 메시지를 표시 하고 싶지만 이는 내 모든 기록 file2
(중복 항목 포함)도 유지하기 때문에 내가 뭘 잘못하고 있는 걸까요? 두 번째 파일이 탭으로 구분되어 있고 첫 번째 파일이 공백으로 구분되어 있기 때문일 수 있나요?
모든 도움에 진심으로 감사드립니다...
답변1
awk
먼저 읽고 file2
저장 한 $1
다음 seen[$1]
읽습니다 file1
. "본" 것이 아닌 경우 $1
다음으로 바꿉니다 NoMatch
.
awk 'FNR==NR{seen[$1]++; next}
{(FNR==1 || ($1 in seen)) || $1="NoMatch"};1' file2 file1
원하는 경우 입력을 정렬해야 합니다 join
. 먼저 head
나머지 행에서 er를 추출한 file1
다음 ed를 사용하여 결과를 추출해야 합니다.sort
join
sort
file2
{ head -n1; sort | join -j1 -a1 -e "NoMatch" -o 2.1 1.2 - <(sort file2); } <file1
필요한 경우 uniq
중복 행을 피하기 위해 모든 항목을 파이프합니다.
{ head -n 1; sort | \
join -j1 -a1 -e "NoMatch" -o 2.1 1.2 - <(sort file2) | \
uniq; } <file1