Ich bin neu in awk und weiß nicht, ob es möglich ist, ein awk-Skript zu schreiben, das dies tut:
Ich habe Hunderte von Datendateien, die ich sortieren muss. Für jeden verwende ich den folgenden Einzeiler:
awk 'ORS=NR%3?" ":"\n" ' file1.tex > file1_sorted.tex
awk 'ORS=NR%3?" ":"\n" ' file2.tex > file2_sorted.tex
...
und ich bekomme die Ausgabe, die ich brauche. Ich hätte jedoch gerne ein Skript, um diese Aktion zu automatisieren, jede Datei zu übernehmen, die Aktion anzuwenden und die entsprechende sortierte Datei zu schreiben.
Ich würde Ihre Hilfe schätzen!
FNR==1
tun ist. =)Sie können die Dateien in einer for-Schleife anwenden:
Oder in einer Zeile:
Da Sie nicht angeben, welche Shell verwendet werden soll, verwenden Sie stattdessen den Standard,
basename
indem Sie die Shell-spezifische Syntax verwenden${file%%.tex}
.quelle
shell
) ausführen und die obigen Befehle an der Eingabeaufforderung ausführen. Oder öffnen Sie ein Terminal und führen Sie dort den Befehl aus. Es gibt zwei Möglichkeiten, Skripte anzugeben (awk, shell usw.): entweder in der Befehlszeile oder in einer Datei. Ihrawk
Befehl in der Buchung verwendet das Befehlszeilenformular. Mein Befehl "eine Zeile" ist auch eine Befehlszeilenform.Alte Frage, aber da ich vor einem Jahrzehnt das letzte Mal einen Single-Core-PC gesehen habe, können Sie gnu parallel verwenden
Lösung der Shell-Erweiterung und Interpretation von Anführungszeichen
Verwenden Sie den richtigen Glob, um die Eingabedateien auszuwählen. Hier verwende ich
{.}
, um die Erweiterung aus dem Ausgabenamen zu entfernen, da ich sie anschließend anhängeWo
X
ist die Anzahl der Prozessoren, die Sie verwenden möchten, können Sie dennoch 1 verwenden. Dies würde Ihnenfile[1-9]_sorted.tex
als Ausgaben gebenquelle