2016-05-25 6 views
0

Ich habe rund 100 Dateien in einem Ordner und ich möchte die Anzahl der eindeutigen Elemente in Spalte 1 zählen. Ich habe den folgenden Code ausprobiert und es gibt mir nur die Anzahl der einzelnen Dateien. Was ich brauche, ist die eindeutige Nummer und auch der Dateiname für jeden Fall.Wie kann ich den Namen von Dateien zusammen mit eindeutigen Einträgen in jeder Datei drucken?

for f in *.bxout; do awk '{print $1}' "$f" | sort| uniq | wc -l ; done 

der Ausgang ist wie

68 

45 

….. 

141 

was ich

68 fille1.txt 

45 fille13.txt 

…. 

141 fille15.txt 

Antwort

0

Nur concat den Dateinamen nach dem Pipeline wie diese benötigen:

for f in *.bxout; do echo "$(awk '{print $1}' "$f" | sort| uniq | wc -l) $f" ; done 

Reduzierung der Pipeline auf einzelne awk Befehl:

$ cat a.bxout 
1 
1 
2 
$ cat b.bxout 
1 
1 
2 
3 
$ for f in *.bxout; do awk '{arr[$1]} END{for(key in arr) cnt++; print cnt " " FILENAME}' "$f"; done 
2 a.bxout 
3 b.bxout 
+0

wie kann ich es auf einzelne awk reduzieren? –

+0

Ich habe versucht, den Dateinamen hinzuzufügen, wie Sie gesagt haben, es funktioniert –

+0

@ ritesht93 ja es druckt den Dateinamen jetzt Ausgabe ist wie <68 dataset1.bxout 67 dataset2bxout 67 dataset3.bxout 269 dataset4.bxout> –

0

Eine andere Möglichkeit, ohne awk, nur einfache cat und uniq

for f in `ls *.bxout`;do cnt=`cat $f|uniq|wc -l`;echo "$cnt $f";done 
Verwandte Themen