awk несподівано видаляє крапку з рядка


9

Я хочу додати стовпчик (2-е місце) у .csvфайл, і я хочу, щоб значення цього стовпця були рядками та цитувались;

Наступна команда додає стовпчик, але без лапок:

awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv

Наступний підхід містить цитати, але він чомусь видаляє останню .(крапку) зі значення

awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv

тому мої значення в кінцевому підсумку становлять "2,40".

Як мені це робити?


Якщо у вашому файлі є 2 або більше стовпців, ви хочете вставити чи замінити другий стовпець?
ctac_

просто вставте стовпчик після першого
pkaramol

2
ок, тому для вставки потрібно використовувати: awk 'BEGIN {FS = OFS = ","} {$ 1 = $ 1 ", \" 2.4.0 \ ""} 1'
ctac_

1
або awk '{sub (",", ", \" 2.4.0 \ ",")} 1'
ctac_

Відповіді:


12

Ви, здається, помилилися цитатами. Вам потрібно зробити так, як нижче

awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv

Це пояснено на сторінці GNU awk man - 3.2 Послідовності втечі

Деякі символи не можуть бути включені буквально до констант рядка ("foo")або констант регулярних виразів ( /foo/). Натомість вони повинні бути представлені послідовностями, що складаються з символів, що є послідовностями символів, що починаються з косої риски ( \). Одним із застосувань послідовності відведення є включення символу з подвійним цитуванням у строковій константі. Оскільки звичайна подвійна цитата закінчує рядок, ви повинні використовувати \"для подання фактичного символу подвійної лапки як частини рядка.


Наскільки я могла зрозуміти причину поведінки, awkсхоже, вона інтерпретувала 2.4.0як числове слово з додатковими цитатами вашого ОП і вирішує втратити точність після першої крапки.

тобто

$2="\""2.4.0"\""

стає справедливим

$2=""2.4.0""

який awkвже не розуміється як струна. Ви можете відтворити таку поведінку, просто зробивши це

awk 'BEGIN { print ""2.4.0"" }'
2.40

що трапляється як результат, коли ви це робите

awk 'BEGIN { print 2.4.0 + 0 }'

1
@roaima: З того, що я маю знаю, це , здається, тільки що скасували, і тільки в результаті { print 2.4.0 }або { print 2.4.0 + 0 }, наприклад , в якості нестроковой складової. Я намагався шукати сюди відповідні документи теж, але не зміг
Inian

2
Ще один спосіб зручного додавання цитат, який я іноді використовую, - це визначення змінної, наприклад:awk -v q='"' '... print q "2.4.0" q ...
Thor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.