Używam sed
w systemie Linux, próbując dopasować linie danych mające trzy pola, tabulator oddzielony (ale separacja może być dowolna biała spacja), jak w:
12.3 0a 1b
15.5 0v 1h
17.7 5k 3c
; teraz używam tego:
sed -n 's/^\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)/\1\t\3\t\2/p' mydata.txt
... więc jestem w stanie wyodrębnić i manipulować (w przykładzie, tylko pozycja inwersja) poprzez poszczególne pola \1
, \2
, \3
.
Czy istnieje lepszy sposób na określenie tego?
Twoje zdrowie!
sed
może nie być najlepszym narzędziem do tego. Czy jest jakiś szczególny powód, dla którego nie chcesz używaćawk
,perl
lub coś lepszego?awk
lubperl
, więc zawsze gdy mam taki problem z „odwróceniem pola w danych tekstowych”, pierwszą rzeczą, o której myślę, jest to, co wiem: „\2 \1
” zsed
. Jednaksed
nieadekwatność do zadania jest również odpowiedzią, którą doceniam ( ponieważ, jak powiedziałem, nie jest to pierwsza rzecz, która przychodzi mi na myśl, gdy mam ten problem ) ... Pozdrawiam!Odpowiedzi:
Trywialny przykład w awk sugerujący, co można zrobić
po prostu przestawia pierwsze dwa pola podczas drukowania wszystkich trzech na wszystkich liniach.
Aby zmienić kolejność tych wierszy, mają dokładnie trzy pola, zachowaj wszystkie, które zaczynają się od
#
(tj. Komentarz w językach podobnych do sh) i usuń wszystkie inneWiększość systemów uniksowych ma dość kompletną stronę podręcznika awk.
Ważną to do swoich celów jest to, że pola są przystępnie z
$1
,$2
, ..., gdzie „pole” jest zdefiniowany jako ciągi rzeczy oddzielonych FS (czyli separator pól), które domyślnie(przestrzeni).
źródło
awk
rzeczywiście wydaje się, że lepiej dla tej pracy; Twoje zdrowie!