Chcę dodać kolumnę (2. miejsce) do .csv
pliku i chcę, aby wartości tej kolumny były ciągami znaków i były cytowane;
Następujące polecenie dodaje kolumnę, ale bez cudzysłowów:
awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv
Poniższe podejście obejmuje cudzysłowy, ale z jakiegoś powodu usuwa ostatnią .
(kropkę) z wartości
awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv
więc moje wartości to „2,40”.
Jak mam to zrobić?
Odpowiedzi:
Wygląda na to, że masz błędne cytaty. Musisz zrobić jak poniżej
Jest to wyjaśnione na stronie podręcznika GNU awk - 3.2 Sekwencje specjalne
O ile rozumiem powód takiego zachowania,
awk
wydaje się, że interpretowałem je2.4.0
jako słowo numeryczne z dodatkowymi cytatami z twojego OP i postanawia stracić precyzję po pierwszej kropce.to znaczy
staje się sprawiedliwy
który
awk
nie jest już rozumiany jako ciąg. Możesz odtworzyć to zachowanie, po prostu robiącco zdarza się, gdy to robisz
źródło
{ print 2.4.0 }
lub{ print 2.4.0 + 0 }
, tj. jako składnikiem nieciągłym. Próbowałem również przeszukać odpowiednie dokumenty, ale nie mogłemawk -v q='"' '... print q "2.4.0" q ...