try:
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
wyjściowa:
111 000 444
222 111 555
333 555 666
Wyjaśnienie powyższego kodu:
FNR==NR
wszystko możesz pracować z jednym całym plikiem na raz. W tym przypadku jest to plik f2
. NR
i FNR
zawierają numery wierszy z różnicą: FNR
zostanie zresetowane do 1, gdy zostanie odczytany nowy plik, gdzie jako NR
nadal rośnie.
- Gdy pracujemy z
f2
pliku, że tworzą tablicę nazwie a
pomocą liczby linii (NR
) jako kolumny key
i trzeci ($3
) jako wartość. next
pozwala nam pominąć resztę bloku akcji.
- Po zakończeniu pliku
f2
zaczynamy pracę nad plikiem f1
. NR==FNR
warunek nie zostanie zmieniony na false, ponieważ FNR
będzie wzrastał od 1, a NR
nie. Tak więc będzie pracował tylko drugi blok działania {$2=a[FNR]}
.
- To, co robi ten blok, powoduje ponowne przypisanie wartości drugiej kolumny do wartości tablicy poprzez wyszukanie numeru wiersza.
1
na końcu drukuje linię. Zwraca true, a w awk
prawdziwe instrukcje powodują drukowanie linii.
f2 f1
to kolejność zdefiniowanych plików. Ponieważ chcemy utworzyć tablicę z pliku f2
, wstawiamy ją jako pierwszą.
Proszę wyjaśnić polecenie. Dzięki – saloua
@sououa dodałam wyjaśnienie. Mam nadzieję, że pomaga! –
Mój przypadek użycia jest bardzo nieznacznie inny (tylko nieznacznie). Różnica polega na tym, że zamiast ograniczonego miejsca miałem plik rozdzielany przecinkami dla f1 i f2. Próbowałem tego samego polecenia z opcją '-F,', ale plik wyjściowy nie miał w tym przypadku przecinka. Jakikolwiek sposób to naprawić? – Ganesh