Zastanawiam się, jak używać Awk do przetwarzania co 2 linie danych zamiast każdego. Domyślnie separator rekordów (RS) jest ustawiony na każdą nową linię, jak mogę to zmienić na co 2 linie.awk zmienić separator rekordów (RS) na co 2 linie
Odpowiedz
Divide & Conquer: zrobić to w dwóch etapach:
- stosować awk wprowadzić pusty wiersz
oddzielić każdy rekord dwuwierszowy:NR%2==0 {print ""}
- rura do innego procesu awk i
zestaw rekordów separator do pustej linii:BEGIN {RS=""}
Zaleta: w drugim awk
proces masz dostępne wszystkie pola z dwóch linii jako $1 to $NF
.
awk '{print}; NR%2==0 {print ""}' data | \
awk 'BEGIN {RS=""}; {$1=$1;print}'
Uwaga:
$1=$1
używany jest tutaj, aby wymusić aktualizację $0
(cały rekord).
Gwarantuje to, że wydruk wypisze dwuwierszowy zapis w jednym wierszu.
Po zmodyfikowaniu pola w programie podczas przetwarzania rekordów dwuwierszowych nie jest to już wymagane.
Zależy od tego, co chcesz osiągnąć, ale jednym ze sposobów jest użycie instrukcji getline
. Dla każdej linii przeczytaj następną i zapisz ją w zmiennej. Więc trzeba będzie pierwszą linią w $0
i drugi w even_line
:
getline even_line
Jeśli chcesz połączyć linie, użyj narzędzia paste
:
$ printf "%s\n" one two three four five
one
two
three
four
five
$ printf "%s\n" one two three four five | paste -d " " - -
one two
three four
five
To trochę hackish, ale jest to dosłowny odpowiedź na pytanie:
awk 'BEGIN {RS = "[^\n]*\n[^\n]*\n"} {$0 = RT; print $1, $NF}' inputfile
Ustaw separator rekordów na wyrażenie regularne odpowiadające dwóm wierszom. Następnie dla każdej linii ustaw $0
na zakończenie rekordu (co jest zgodne z wyrażeniem regularnym w RS
). Spowoduje to podział pola na FS
. Oświadczenie o druku jest tylko miejscem przechowywania prezentacji.
Pamiętaj, że $0
będzie zawierać dwa znaki nowej linii, ale pola nie będą zawierały żadnych znaków nowej linii.
- 1. Jak przełączać/obracać co dwie linie za pomocą sed/awk?
- 2. zmienić linię z awk
- 3. Scal 2 linie w jeden
- 4. awk stumper: podstawienie regex w polu
- 5. Jak zmienić separator linii JAXB Marshaller?
- 6. Jak zmienić kolor WPF `<Separator />`?
- 7. Sed/Awk - przeciągnij linie między wzorami x i y
- 8. wyszukiwania awk na wielu polach pliku nagrania wielu linii
- 9. Usuń linie z pliku z SED lub AWK
- 10. Podział etykiet na 2 linie w ggplot z czynnikami
- 11. CodeMirror 2: Wiele wcięć usuwa linie
- 12. Filtrowanie wierszy na podstawie liczby kolumn z AWK
- 13. usunąć zerowe linie 2-D numpy tablicy
- 14. JavaFX 2.x: Jak edytować linie rysowane na XY LineChart?
- 15. Android: Ustaw zawijanie listy AutoCompleteTextView na 2 linie lub więcej
- 16. Rysuj pionowy separator na UITableViewCell
- 17. Jak zmienić separator ścieżki współbieżnego budowania w Jenkins
- 18. Jak zmienić separator dziesiętny w komendzie printf w bash?
- 19. Jak dodać separator poziomy w R za heatmap.2
- 20. Zmiana laravel Blade Separator
- 21. Jak zmienić tło na co 5s
- 22. Paraboliczne linie odniesienia na ggplot
- 23. Co to są 0 $ i 1 $ w skrypcie awk?
- 24. Co to jest liczba rekordów wracających 1?
- 25. Dopasowywanie awk i multilines (subregex)
- 26. Równoległe linie ukośne na tle
- 27. MYSQL - Separator tysięcy separatorów
- 28. awk asocjacyjna rośnie szybko
- 29. awk/sed/grep, aby usunąć linie pasujące do pól w innym pliku
- 30. java.lang.IllegalArgumentException: zawiera separator ścieżki