Ich frage mich, ob es eine einfache Möglichkeit gibt, bestimmte Leitungen mit vorab zugewiesenen Zeilennummern zu bearbeiten.
Angenommen, ich möchte die 1., 7., 14. und 16. Zeile einer Datei ausgeben, was ich einfach tun kann
sed -n '1p;7p;14p;16p' input_file
Dies wird jedoch komplizierter, wenn die Operation nicht nur gedruckt wird und ich nicht viermal denselben langen Befehl schreiben möchte (und ja, ich weiß, dass ich diesen langen sed-Befehl konstruieren kann, indem ich dieselbe bash-Variable viermal ersetze, aber das ist nicht ideal genug ...), dh
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Gibt es eine Möglichkeit, den Vorgang in diesen bestimmten Zeilen meiner Datei auszuführen? Ich erwarte so etwas wie
sed -n '1,7,14,16p'
was in der aktuellen Form sicherlich nicht funktionieren wird.
Jede Hilfe wird geschätzt. "Nein, das ist nicht möglich." mit Erklärungen ist auch eine Antwort, die ich akzeptieren werde.
awk
Antworten:
Sie können Zweige verwenden:
(Beachten Sie, dass Sie auch einige
20,25b1
Zeilenbereiche hinzufügen oder/re/b1
Zeilen einschließen können, die mit den übereinstimmenre
).Oder Sie könnten verwenden
awk
:Oder mit einem Hash:
(oder
BEGIN{lines[1]lines[7]lines[14]lines[16]}
wenn es nicht zu viele gibt)quelle
Kehren Sie einfach Ihre Auswahl um und löschen Sie sie:
quelle
Erste Variante:
Sie können diesen Trick verwenden:
Testen
Ausgabe
Zweite Variante:
Am Anfang wird das Auxiliary
sed
verwendet, um nur benötigte Zeilen aus der Datei zu filtern, und diese Zeilen werden dannsed
mit dem Befehl long an die Hauptleitung weitergeleitet .quelle