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