Nowe posty

xx Problem ze sterownikami. (4)
Dzisiaj o 18:09:24
xx Instalacja xfce4 (2)
Dzisiaj o 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: AWK / SED - Przejście przez listę  (Przeczytany 3270 razy)

sztonyk

  • Gość
AWK / SED - Przejście przez listę
« dnia: 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

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
AWK / SED - Przejście przez listę
« Odpowiedź #1 dnia: 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.

xavery

  • Gość
AWK / SED - Przejście przez listę
« Odpowiedź #2 dnia: 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ć.

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
AWK / SED - Przejście przez listę
« Odpowiedź #3 dnia: 2013-01-21, 21:44:24 »
Ja bym to zrobił tak:
sed -e ''$num's/|\\s*$/|DONE/'