2016-04-20 5 views
1

(als Beispiel), ich habe 10 Dateien, benannt als solche; Dateiname1.txt, Dateiname2.txt, Dateiname3.txt usw.Unix - extrahiere Dateien mit einer bestimmten Anzahl von Zeilen

Jede Datei enthält zwischen 1-10 Zeilen.

Ich möchte einen Befehl, der nur die Dateien mit einer bestimmten Anzahl von Zeilen drucken wird. dh ich will Druck der Dateinamen sagen, ob die Datei 1 Zeile hat und dann Druck der Dateinamen mit 2 Zeilen usw.

Ich weiß also, die Anzahl der Zeilen in der Datei zu zählen es wc -l filename ist, Was ist der nächste Teil, zu sagen if wc -l filename == 1, print filename?

Antwort

3

würde ich

wc -l * | awk '$1 == 10 {print $2}' 

Der awk Aufruf druckt einfach Spalte 2 jeder Zeile, in der Spalte 1 enthält den Wert 10.

0
export wanted_lines=10 
for i in file*; do [[ `wc -l $i | nawk '{print $1}'` == $wanted_lines ]] && cat $i; done 

aktualisieren

export wanted_lines=10 

declare wanted_lines als Variable, initia lize bis 10 und Marke für den automatischen Export in die Umgebung der anschließend ausgeführten Befehle

for i in file*; do 

Diese verwendet Datei eine Liste aller Dateien im aktuellen Verzeichnis mit einem Namen zu konstruieren globbbing, die mit „Datei“ beginnt. Jede Iteration des i-Variable auf den nächsten Wert in der Liste

[[ expression ]] 

eckige Klammern beziehen - den Ausdruck bewertet und einen 0 oder 1

`command` 

Backticks zurück - führt Befehl und ersetzt mit Ausgabe von Befehl

wc -l $i 

die Linien der variablen zählen i, in diesem Fall ein Dateiname

| nawk '{print $1}' 

stdout früheren Befehl wird an stdin von nawk zugeführt wird, die erste Spalte gedruckt wird, in diesem Fall ein Dateiname

== $wanted_lines 

Gleichheitstest wird wahr oder falsch zurückgeben (0 oder 1), das jeweils

&& expression 

Kontrolle wird von einem Operator Ausdruck ausgeführt werden, wenn und nur wenn der vorherige Ausdruck true zurück

In Englisch: Zählen Sie für jede Datei, die mit dem Namen "file" beginnt, die Zeilen. Wenn und nur wenn die Anzahl der Zeilen der Variablen $ wants_lines entspricht, drucken Sie die Datei.

+0

Obwohl dieser Code die Frage beantworten kann, die Bereitstellung zusätzlichen Kontext in Bezug auf _why_ und/oder _how_ es beantwortet die Frage würde seine lange deutlich verbessern -term Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

Verwandte Themen