Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: sztonyk w 2013-01-21, 10:52:08

Tytuł: AWK / SED - Przejście przez listę
Wiadomość wysłana przez: sztonyk w 2013-01-21, 10:52:08
Witam,

Mam problem z przejściem przez listę która się składa z dwóch kolumn oddzielonych separatorem "|"

Dane wejściowe w pliku to:

AAA|
BBB|
CCC|
DDD|
EEE|
FFF|
GGG|

chciałbym do drugiej kolumny zaraz po separatorze "|" wpisać słowo "DONE", chciałbym to zrobić podając numer lini w jakiej to ma sie pojawić,

mam dwa kody które robią mniej więcej to co chcem:

num=

sed -e ''$num's/^[^|]*|/DONE|/' >

Sed działa poprawnie, tzn zamienia to co występuje ale tylko w pierwszej kolumnie, nie wiem jak mogę go zmusić do zamienienia w czegokolwiek w drugiej kolumnie

awk 'BEGIN { FS=OFS="|" ; } NR=='$num' { $2 = "DONE"; print }' >

AWK działa poprawnie zamienia w drugiej kolumnie ale z kolei wyświetla jako rezultat tylko linie którą zmienił a nie całą listę + linie która zastała zmieniona na tej samej pozycji

Proszę o pomoc w modyfikacji albo sed albo awk

Pozdrawiam
Tytuł: AWK / SED - Przejście przez listę
Wiadomość wysłana przez: vanhelzing w 2013-01-21, 14:40:59
Użyj seda
Cytuj
chciałbym do drugiej kolumny zaraz po separatorze "|" wpisać słowo "DONE"
i zapisz to jako wyrażenie regularne.
Tytuł: AWK / SED - Przejście przez listę
Wiadomość wysłana przez: xavery w 2013-01-21, 16:53:24
Ja bym zrobił tak:

awk -F\\| '{if (NR == num) {printf ("%sDONE\\n",$0) } else {print $0;}}' num=numer_linii plik
Gdzie "numer_linii" to oczywiście liczba określająca numer linii którą chcemy przetworzyć.
Tytuł: AWK / SED - Przejście przez listę
Wiadomość wysłana przez: vanhelzing w 2013-01-21, 21:44:24
Ja bym to zrobił tak:
sed -e ''$num's/|\\s*$/|DONE/'