여러 텍스트 파일에서 고유한 항목을 선택하고 출력 파일로 인쇄하는 방법은 무엇입니까?

여러 텍스트 파일에서 고유한 항목을 선택하고 출력 파일로 인쇄하는 방법은 무엇입니까?

비슷한 데이터가 포함된 파일이 3개 있습니다. 나는 3개의 파일을 읽고 해당 값과 함께 고유한 항목을 출력할 수 있는 bash 스크립트를 원합니다. 예:

1.txt
aceE    14
aceF    8
adhE    20
asnS    2
carB    2
dnaK    3
eno     2

2.txt
aceE    11
aceF    7
acnB    2
acrB    1
adhE    22
asnS    2
dapD    3

3.txt
aceE    16
aceF    10
adhE    18
aroK    2
asnS    3
dapD    4
dnaK    4

따라서 출력은 다음과 같아야 합니다.

acnB    2
acrB    1
aroK    2
carB    2
eno     2

답변1

GNU uniq또는 호환 가능( -w옵션의 경우):

sort {1,2,3}.txt | uniq -u -w5
acnB    2
acrB    1
aroK    2
carB    2
eno     2

편집: 첫 번째 필드의 길이를 좀 더 유연하게 만들기 위해 Guillermo의 접근 방식 중 일부를 구현할 수 있습니다.

grep -f <(sort {1,2,3}.txt | cut -d' ' -f1 | uniq -u) <(sort {1,2,3}.txt)

결과적으로 입력 파일의 구분 기호는 <tab>이고 가 아닙니다 <space>. 입력 파일을 질문에 붙여넣어 변경되었습니다. :-(
그럼에도 불구하고 이것은 <tab>.

grep -f <(sort {1,2,3}.txt | cut -f1 | uniq -u) <(sort {1,2,3}.txt)

답변2

나는 이것을 제안한다:

sort {1,2,3}.txt | cut -d' ' -f1 | uniq -u | xargs -I '{}' grep -h "{}" {1,2,3}.txt

파일 내용을 정렬합니다.

sort {1,2,3}.txt

첫 번째 열만 출력합니다.

cut -d' ' -f1

고유 항목 필터링:

uniq -u

acnB
acrB
aroK
carB
eno

출력 피드 사용 grep:

xargs -I '{}' grep -h "{}" {1,2,3}.txt

acnB    2
acrB    1
aroK    2
carB    2
eno     2

답변3

와 함께 awk:

awk '
  n[$1]++ {delete s[$1]; next}
  {s[$1] = $0}
  END {for (i in s) print s[i]}' [123].txt

답변4

밀러(https://github.com/johnkerl/miller) 그리고 실행 중

mlr --csv --fs "\t" -N count-similar -g 1 then filter '$count==1' then cut -x -f count 1.txt  2.txt 3.txt

당신은 할 것

carB    2
eno     2
acnB    2
acrB    1
aroK    2

관련 정보