
for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
Gibt mir einen Fehler:
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
Antwort1
Die Ausgabe wc -l sedtest1
sieht ungefähr so aus:
21 sedtest1
Der Test wird also in etwa so aussehen a <= 21 sedtest1
: „ist ungültig.“
Das bedeutet auch, dass der wc
Befehl bei jeder Iteration der Schleife ausgeführt wird. Wenn sich der Inhalt der sedtest1
Datei zwischen den einzelnen Iterationen nicht ändert, wäre es besser, diese Zeilenanzahl zunächst in einer Variablen außerhalb der Schleife zu speichern:
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
Ich vermute auch, dass Sie versuchen, eine Schleife zu verwenden, um Text auf eine ineffiziente und nicht Shell-basierte Weise zu verarbeiten. Vielleicht möchten Sie lesenWarum gilt die Verwendung einer Shell-Schleife zur Textverarbeitung als schlechte Praxis?. Auf diese Weise jede Zeile einer Datei zu durchlaufen, ist nicht der richtige Weg.
Antwort2
Egal, ich war einfach unglaublich dumm …
wc -l file
gibt als „x-Datei“ aus.
Alles was ich tun musste, war Folgendes:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done