Ich versuche, AWK zu verwenden, um jedes Wort in einem Textdokument in einer neuen Zeile zu platzieren. Ich weiß nicht wirklich, wie man AWK benutzt, aber ich habe einige Befehle online gefunden, die mein Problem lösen sollten. Ich habe die folgenden Befehle versucht:Verwenden von AWK, um jedes Wort in einer Textdatei in einer neuen Zeile zu platzieren
$ awk '{ for (i = 1; i <= NF; i++) print $i }' input.txt > output.txt
und
$ awk '{c=split($0, s); for(n=1; n<=c; ++n) print s[n] }' input.txt > output.txt
jedoch beide Befehle die gleiche Wirkung haben, das ist, dass alle Leerzeichen entfernt werden.
Aus Gründen der Klarheit sagen lässt, dass input.txt den Text enthält:
The fox jumped over the dog
output.txt enthalten:
The
fox
jumped
over
the
dog
jedoch output.txt enthält:
Thefoxjumpedoverthedog
Ich verwende Cygwin unter Windows 7, um diese Befehle zu verwenden. Gibt es etwas, das mir in den Befehlen fehlt?
die auf Standard Awk Plattformen nicht reproduzierbar ist. Vielleicht druckt Ihr Awk Unix-Zeilenenden und das Werkzeug, mit dem Sie die Dateien untersuchen, weiß nicht, was Sie damit machen sollen? Die Awk-Skripte sind in Ordnung; Wie man sie auf ihrer Plattform richtig laufen lässt, ist hier die Frage, aber das ist nicht wirklich ein Programmierproblem. – tripleee
@tripleee Danke, ich dachte, es würde etwas mit der Kompatibilität zwischen Win/Unix-Systemen zu tun haben. – hjalpmig
ah, Kompatibilität zwischen Windows und Unix, yep. Probiere 'cat -vet-Datei' aus. Wenn Sie '^ M $' am Zeilenende sehen, verwenden Sie 'dos2unix file', um in das Unix-Format zu konvertieren. (Oder wenn ich die "Richtung" Ihrer Daten missverstehe, gibt es auch "unix2dos file". Viel Glück. – shellter