2012-10-04 5 views
9

Mögliche Duplizieren:
bash echo number of lines of file given in a bash variableAusgang Anzahl der Zeilen in einer Textdatei im Unix zu screenen

frag dich, wie Sie die Ausgabe der Anzahl der Zeilen in einer Textdatei zu screenen und dann Speichern Sie es in einer Variablen. Ich habe eine Datei mit dem Namen stats.txt und wenn ich wc -l stats.txt laufen gibt es 8 stats.txt

ich x = wc -l stats.txt versuchte dabei dachte, es die Zahl nur würde speichern und der Rest ist nur für die visuelle, aber es funktioniert nicht :(

danke für die Hilfe

+2

Wie wäre es mit 'x = $ (wc -l

+0

Ein Bash-Tutorial kann Ihnen helfen: http://tldp.org/LDP/Bash-Beginners-Guide/html/ –

Antwort

2

Sie können versuchen:

x=`cat stats.txt | wc -l` 

oder (aus dem Kommentar des another.anon.coward):

x=`wc -l < stats.txt` 
+1

Sie können es tun, ohne 'cat' & pipe als' x = $ (wc -l

+0

@gokcehan, als ich es ausgeführt habe ---- cat courpfile.txt | wc -l ----- es hat funktioniert. aber als ich versuchte, es zu speichern, bekam ich einen Fehler: -bash: x: Befehl nicht gefunden – Masterminder

+0

vergessen Sie nicht die Backticks ('') – none

16

Es gibt zwei POSIX-Standard-Syntax für dies zu tun:

x=`cat stats.txt | wc -l` 

oder

x=$(cat stats.txt | wc -l) 

Sie sowohl das Programm ausführen und den Aufruf im Skript mit der Standardausgabe des Befehls ersetzen, In diesem Fall wird es der Variablen $x zugewiesen. Beachten Sie jedoch, dass beide Zeilenende-Zeilenumbrüche enden (das ist eigentlich das, was Sie hier haben möchten, aber manchmal gefährlich sein kann, wenn Sie eine Zeilenschaltung erwarten). Der zweite Fall kann leicht verschachtelt werden (Beispiel: $(cat $(ls | head -n 1) | wc -l)). Sie können es auch mit dem ersten Fall tun, aber es ist komplexer:

`cat \`ls | head -n 1\` | wc -l` 

Es gibt auch Angebotsproblemen. Sie können diese Ausdrücke in doppelte Anführungszeichen enthalten, aber mit den Back-Zecken, müssen Sie weiterhin innerhalb des Befehls zitiert, während die Klammer verwenden, können Sie die Gruppe „eine neue zitieren Start“:

"`echo \"My string\"`" 
"$(echo "My string")" 

this helps =)

+0

danke für die Hilfe – Masterminder

+2

Es gibt keine Notwendigkeit für 'Katze' oder irgendeine Umleitung/Rohre - tun Sie einfach: x = $ (wc -l /path/to/file.txt) –

Verwandte Themen