Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (0)
Wczoraj o 17:52:01
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

Autor Wątek: AWK / SED - Przejście przez listę  (Przeczytany 3300 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/'