UNIX: Wie kann man mit sed jede 1. und 2. Zeile in Gruppen von 4 Zeilen drucken?

428
kabita regmi

Meine Datei enthält mehrere Zeilengruppen. Jeder Satz hat 4 Zeilen. Zeile 1-4 ist eingestellt 1. Zeile 5-8 ist auf 2 eingestellt und so weiter. Ich muss die ersten beiden Zeilen aus jedem Satz drucken, dh Zeile 1 und 2, Zeile 5 und 6 usw.

Dateiinhalt:

line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 .. line n 
0

2 Antworten auf die Frage

2
Kamil Maciorowski
sed -n '1~4p;2~4p' 

1~4p trifft auf jede 4. Zeile, beginnend mit der 1.:

line 1 line 5 line 9 … 

2~4p trifft auf jede 4. Zeile, beginnend mit der 2.:

line 2 line 6 line 10 … 

Wenn sie zusammen verwendet werden, tun sie, was Sie wollen.

Vielen Dank für die neuen Infos: Ich würde `m ~ n` noch nicht kennenlernen, hauptsächlich, weil es ansonsten nicht so gut ist (ausgezeichnetes Tutorial) (http://www.grymoire.com/unix/sed.html). AFH vor 5 Jahren 0
Danke für die Antwort. Genau das, was ich brauchte. Mein Mac-Bash-Terminal hat ~ nicht erkannt. Es lief gut auf Git Bash unter Windows. Danach konnte ich herausfinden, warum Mac Bash nicht funktionierte. kabita regmi vor 5 Jahren 0
@kabitaregmi Erwägen Sie, meine Antwort zu akzeptieren, um anzuzeigen, dass das Problem gelöst ist. Bitte lesen Sie unsere [Tour] für Details. Kamil Maciorowski vor 5 Jahren 0
0
Eugen Rieck

Ich denke nicht, dass seddas Werkzeug der Wahl hier ist - warum nicht einfach Shell-Script?

cat /path/to/infile | while true; do read l || break ; echo "$l" ; read l || break ; echo "$l" ; read l || break ; read l || break ; done > /path/to/outfile 
Ich wollte eine ähnliche Antwort vorschlagen, aber Sie müssen eine Variante des Befehls "read" verwenden, um Änderungen an der Zeile zu vermeiden: "read -rl" verhindert eine spezielle Verarbeitung (z. B. umgekehrte Schrägstriche in der Zeile). Führende und nachfolgende Leerzeichen gehen jedoch verloren. Was Sie brauchen, ist `read -r` ohne Variable, die die Zeile einschließlich aller Leerzeichen in` $ REPLY 'liest. Verwenden Sie also' echo "$ REPLY" `anstelle von 'echo' $ l '`. AFH vor 5 Jahren 1
Danke auch für deine Antwort. Ich wusste, dass Schleifen funktionieren würde. Ich musste mich mit Sed beschäftigen. kabita regmi vor 5 Jahren 0