Unter Linux läuft dies wie erwartet:Schaltet das awk CR LF-Handling bei Cygwin aus?
$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
awk: line2
Aber unter Windows die \ r fallen gelassen wird (awk hält diese eine Zeile):
Fenster:
$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
line2
Windows-GNU Awk 4.0 .1 Linux GNU Awk 3.1.8
EDIT von @EdMorton (sorry, wenn das eine unerwünschte Ergänzung ist, aber ich denke, vielleicht hilft es dem onstrate der Ausgabe):
Betrachten Sie diese RS Einstellung und Eingabe (auf Cygwin):
$ awk 'BEGIN{printf "\"%s\"\n", RS}' | cat -v
"
"
$ echo -e "line1\r\nline2" | cat -v
line1^M
line2
Dies ist Solaris mit gawk:
$ echo -e "line1\r\nline2" | awk '1' | cat -v
line1^M
line2
und das ist Cygwin mit gawk:
$ echo -e "line1\r\nline2" | awk '1' | cat -v
line1
line2
RS
war nur die Standard-Zeilenumbruch, also wo ging die Kontrolle-M in Cygwin?
Ja, das habe ich auch in Cygwin gesehen. Ich konnte nicht gestört werden, es zu untersuchen oder zu debuggen, und ich habe sehr wenige Dateien, die '' s in ihnen haben, also habe ich bei Bedarf einfach ein 'tr-d '\ r' | awk ... 'davor, um die' \ r's zu löschen. Hoffentlich wird jemand etwas Licht abwerfen - gute Frage! –
Haben Sie versucht "-V IRS"? Hinweis I für Eingabe – mlt
'awk -v IRS = etwas? Das würde eine unbenutzte, benutzerdefinierte awk-Variable namens 'IRS' auf' etwas' setzen. Dies hätte keine Auswirkungen auf dieses Problem. –