Biorąc pod uwagę: w rekordzie znajduje się 40 kolumn. Chcę zastąpić 35. kolumnę, aby 35. kolumna została zastąpiona treścią 35. kolumny i symbolem „$”. Przyszło mi do głowy coś takiego:
awk '{print $1" "$2" "...$35"$ "$36...$40}'
Działa, ale ponieważ jest to niewykonalne, gdy liczba kolumn wynosi aż 10 000. Potrzebuję lepszego sposobu, aby to zrobić.
linux
text-processing
awk
replace
Marcus Thornton
źródło
źródło
sed 's/./$&/35'
$
- rozdzielanym lub nie. Powyższe powinno umieszczać 35. wystąpienie dowolnej liczby znaków ogranicznika - innymi słowy 35. pole - z char$
- bez względu na to, jak znaki są w każdym polu.Zrobiłem to, aby zarezerwować oryginalny separator pola. Kolumna, którą chciałem wygasić, miała numer 12 USD.
Za pomocą
gawk -i
, jeśli go masz, możesz edytować plik na miejscu.źródło
Gdyby wystąpiły problemy z użyciem „zatwierdzonych” odpowiedzi, zastąpiłoby to więcej niż tylko pierwszą kolumnę w pliku. Używam tego ogólnego polecenia:
Gdzie:
[column]
= kolumna, którą chcesz zmienić, zaczynając od 1 (nie 0)[replace]
= tekst, który chcesz zastąpićźródło
awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile
... zastąpił milion znaczników czasu w kilka sekund !! :)