[LINUX] [Bash] Befehl zum zeilenweisen Schreiben von Dateien in die Seriennummer [One Liner (?)]

Ich werde es als Memo zum Zweck des Memorandums hinterlassen.

Hintergrund

・ Ich möchte eine bestimmte Datei zeilenweise speichern und die Dateinamen in Seriennummern unterteilen. ・ Bei Seriennummern möchte ich eine Null-Auffüllung anwenden, damit die Anzeigereihenfolge angemessen ist. -Die zu teilende Datei hatte ungefähr 4000 Zeilen ** ・ Die Zeichenkette im Teilungsziel enthält "", und ich möchte sie so lassen, wie sie ist. ← 2020/03/13 (Fr) Nachtrag **

Es war ziemlich mühsam, die Datei als Shell-Skript zu belassen, deshalb habe ich sie so geschrieben, dass sie nur mit einem Befehl abgeschlossen werden kann. (Am Ende scheint sich der in die Shell-Datei geschriebene Inhalt überhaupt nicht geändert zu haben ...)

Ausführungsumgebung

$ bash --version
GNU bash,Version 4.4.20(1)-release (x86_64-pc-linux-gnu)

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"

Ausführungsbefehl

Vor der Verbesserung


count=1 ; load_target="hogehoge.txt" ; cat ${load_target} | while read line ; do echo ${line} > "${load_target}_`printf \"%04d\" ${count}`.txt" ; count=`expr ${count} + 1` ; done

Wenn oben "" in der geteilten Zeichenfolge enthalten ist, wird es als Escapezeichen gelesen und gelöscht. (Ich hatte es mit Daten zu tun, die HTML-Tag-Informationen im Werteteil des JSON-Formats enthielten, und es ist tatsächlich passiert ...)

** Wenn Sie nicht gelöscht werden möchten, können Sie die Option -r des Befehls read verwenden **

Nach der Verbesserung


count=1 ; load_target="hogehoge.txt" ; cat ${load_target} | while read -r line ; do echo ${line} > "${load_target}_`printf \"%04d\" ${count}`.txt" ; count=`expr ${count} + 1` ; done

In Bezug auf die Erweiterung und den 0-Auffüllteil zum Zeitpunkt der Ausgabe scheint es cool zu sein, wenn Sie etwas mehr entwickeln und die Informationen der Variablenerweiterung und der Lesequelldatei extrahieren, da diese entsprechend der Anzahl der Zeilen der Lesequelldatei zerkleinert werden. Das oben genannte Problem wurde vorerst gelöst, daher hoffe ich, dass ich es später verbessern kann.

Mit One Liner gibt es noch elegantere Schreibweisen! !! Ich wäre Ihnen dankbar, wenn Sie uns Ihre Meinung für spätere Studien mitteilen könnten. .. ..

Recommended Posts

[Bash] Befehl zum zeilenweisen Schreiben von Dateien in die Seriennummer [One Liner (?)]
[Python] Ändern Sie den Namen der Bilddatei in eine Seriennummer
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
So schreiben Sie einen ShellScript Bash für Anweisung
So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf
Lesen Sie mit Python Zeile für Zeile aus der Datei
Ich möchte mit Python in eine Datei schreiben
So schreiben Sie eine ShellScript-Bash-Case-Anweisung
[Python] Speichern Sie die von OpenCV importierten Videodaten als JPG-Datei mit Seriennummer
So schreiben Sie eine GUI mit dem Befehl maya
So zeigen Sie eine bestimmte Zeile einer Datei oder ein Befehlsergebnis unter Linux an (sed, awk)
So führen Sie eine Python-Datei an einer Windows 10-Eingabeaufforderung aus
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
Da das von pandas.read_excel gelesene Excel-Datum ein serieller Wert war, wurde es in datetime.datetime konvertiert.
Ein Liner, um irgendwo zu reden
Laden Sie eine Datei in Dropbox hoch
Dateien lesen und schreiben
Dateien schreiben und lesen
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
Erstellen Sie ein Befehlszeilenprogramm, um mit Python Dollar in Yen umzurechnen