Awk – zamień tylko jeden znak w określonej kolumnie

Mam taki plik:

2018.01.02;1.5;comment 1 2018.01.04;2.75;comment 2 2018.01.07;5.25;comment 4 2018.01.09;1.25;comment 7 

Chcę zastąpić wszystkie kropki . w drugiej kolumnie przecinkiem ,, tak jak w przypadku sed "s/\./\,/g" file jak mogę użyć sed lub najlepiej awk, aby zastosować to tylko do drugiej kolumny, aby moje wyniki wygląda tak:

2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7 

Odpowiedź

$ awk "BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1" ip.txt 2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7 
  • BEGIN{} ten blok kodu zostanie wykonany przed przetworzeniem dowolnego wiersza wejściowego
  • FS=OFS=";" ustaw separatory pól wejściowych i wyjściowych jako ;
  • gsub(/\./, ",", $2) dla każdego wiersza wejściowego, zamień wszystkie . w drugim polu z ,
  • 1 to idiom awk do wydrukowania cd ents of $0 (który zawiera rekord wejściowy)

Answer

sed "s/\./,/3" file 

Zastąp trzecie wystąpienie kropki

Odpowiedź

Wykonano przez poniżej metoda przy użyciu awk

Polecenie: awk -F ";" "{gsub(/\./,",",$2);print $1";"$2";"$3}" filename

wyjście

2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *