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

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

비슷한 데이터가 포함된 파일이 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

관련 정보