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, -
1to 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