Nach IFS=
Sie einen Platz benötigen.
Wenn Sie der Variablen characters
einen Wert zuweisen, sollten Sie Leerzeichen vermeiden.
Mit characters="cut -c900-903"
werden Sie den Zeichen einen Text zuweisen, nicht das Ergebnis eines Unterbefehls. Verwenden Sie hierzu $(command)
.
Der Befehl benötigt eine Eingabe zum Schneiden, verwenden Sie echo "${line}"
.
Leerzeichen sind nicht leer, die -n $characters
(was sollte -n "$characters"
sein, Fehler zu vermeiden chan die var ist leer) wird glücklich sein, nachdem Räume zu sehen.
while IFS= read -r line; do
characters=$(echo "${line}"| cut -c900-903)
if [ "${characters}" != " " ]
then
echo "${line}"
fi
done < $inputfile > $output_file
Bei großen Dateien wird dies aufgrund der Unterbefehle, die in jeder Schleife geladen werden müssen, sehr langsam. Sie können andere Werkzeuge wie awk
, grep
oder sed
ausprobieren. Hat das für Sie folgende Arbeiten:
grep -vE "^.{899} {4}" ${inputfile}
Haben Sie bedeuten, dass, wenn die Zeichen alle Leerzeichen sind, sollten sie entfernt werden? Möchten Sie die gesamte Zeile in die andere Datei oder nur die extrahierten Zeichen drucken? Bitte [Bearbeiten], um mehr zu erklären und uns ein Beispiel Ihrer Eingabe/gewünschten Ausgabe zu zeigen. –
Wollen Sie sagen, dass Sie alle Zeilen mit einer minimalen Länge in eine andere Datei verschieben möchten? Warum verschieben, wenn Sie auch alle Zeilen mit der Länge <10 löschen möchten? –
Müssen ganze Zeile verschieben, wenn die extrahierte Länge des Zeichens keine Leerzeichen sind, habe ich unten Code versucht, während IFS = Read -r-Zeile; Zeichen tun = schneiden -c900-903 if [-n $ Zeichen] dann echo "$ line" fi done <$ Eingabedatei> $ Ausgabedatei. Aber der obige Code funktioniert nicht, es schreibt die extrahierten Zeichen in eine neue Datei. –