/ / Sed / Awk - przeciągnij linie między wzorami x i y - bash, sed, awk

Sed / Awk - przeciągnij linie między wzorami x i y - bash, sed, awk

Mam duże pliki CSV, w których chcę wyodrębnić wszystkie dane między wierszem X, który zawiera wzór "x" i wiersz Y, który zawiera wzór "y"

Na przykład:

other_data
Header
data
data
data
Footer
other_data

Chcę móc potokować wszystko pomiędzy (i włącznie) Nagłówkiem -> Stopka do nowego pliku.

Dzięki!

Odpowiedzi:

17 dla odpowiedzi nr 1

Za pomocą awk to całkiem proste:

awk "/Header/ { show=1 } show; /Footer/ { show=0 }"

Zasadniczo zachowaj stan w zmiennej o nazwie show. Kiedy uderzymy w nagłówek, włączamy go, Footer wyłączamy. Podczas gdy jest włączony, show rule wykonuje domyślną akcję drukowania rekordu.


15 dla odpowiedzi nr 2

To jest całkiem proste w sed:

sed -n "/Header/,/Footer/p"

lub

sed "/Header/,/Footer/!d"

10 dla odpowiedzi nr 3

Inny sposób z awk:

awk "/Header/,/Footer/" file
Header
data
data
data
Footer

Po prostu przekieruj dane wyjściowe, aby zapisać w nowym pliku:

awk "/Header/,/Footer/" file > newfile

1 dla odpowiedzi nr 4

To może ci pomóc (GNU sed):

 sed "/^Header/,/^Footer/w new_file" file