Wie wähle ich eindeutige Einträge aus mehreren Textdateien aus und drucke sie in der Ausgabedatei?

Wie wähle ich eindeutige Einträge aus mehreren Textdateien aus und drucke sie in der Ausgabedatei?

Ich habe 3 Dateien mit ähnlichen Daten. Ich möchte ein Bash-Skript, das die 3 Dateien lesen und die eindeutigen Einträge mit ihren Werten ausgeben kann. Beispiel:

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

Die Ausgabe sollte also etwa so aussehen:

acnB    2
acrB    1
aroK    2
carB    2
eno     2

Antwort1

Mit GNU uniqoder kompatibel (für die -wOption):

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

Bearbeiten: Um bei der Länge des ersten Felds etwas flexibler zu sein, könnten einige von Guillermos Ansätzen implementiert werden.

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

Wie sich herausstellt, sind die Trennzeichen in den Eingabedateien <tab>und nicht <space>. Dies wurde geändert, indem die Eingabedateien in die Frage eingefügt wurden. :-(
Trotzdem sollte dies mit funktionieren <tab>.

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

Antwort2

Ich schlage Folgendes vor:

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

Sortieren Sie den Inhalt der Dateien:

sort {1,2,3}.txt

Geben Sie nur die erste Spalte aus:

cut -d' ' -f1

Unikate filtern:

uniq -u

acnB
acrB
aroK
carB
eno

Mit dem Ausgabe-Feed grep:

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

acnB    2
acrB    1
aroK    2
carB    2
eno     2

Antwort3

Mit awk:

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

Antwort4

Mit Miller (https://github.com/johnkerl/miller) und läuft

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

du wirst haben

carB    2
eno     2
acnB    2
acrB    1
aroK    2

verwandte Informationen