Как заменить все подчеркивания на точки

Я хочу заменить все подчеркивания в первом столбце файла CSV. Он должен делать что-нибудь с другим столбцом файла CSV.

Я только смог найти это: sed 's /_/./ g' file.txt

Но я хочу заменить все подчеркивания точкой только в первом столбце текста файл. Как передать первый столбец команде sed?

Спасибо

0
задан 10 February 2019 в 14:48

2 ответа

Sed не имеет никакого встроенного понятия "столбцов", так вместо того, чтобы заменить символы глобально (с g флаг замены) необходимо было бы заменить их по одному в цикле, повреждающемся от цикла, когда больше нет символов, которые будут заменены перед первым разделителем. Например:

sed -e ':a' -e '/^[^,]*_[^,]*,/!b' -e 's/_/./;ta' file.csv

По моему скромному мнению, было бы легче использовать инструмент, который исходно понимает поля - например, с Awk:

awk -F, 'BEGIN{OFS=FS} {gsub(/_/,".",$1); print}' file.csv

Обратите внимание, что оба из них повредятся, если Ваш файл CSV будет содержать заключенные в кавычки разделители - если это так, то необходимо будет подойти к инструменту, который может проанализировать CSV правильно - такой как Perl с текстом:: модуль CSV.

2
ответ дан 10 February 2019 в 14:48

Я бы порекомендовал awk over sed для этой работы:

awk -F',' 'BEGIN {OFS=FS}{gsub(/_/,".",$1);print}' yourfile.csv

-F - разделитель полей, и здесь мы устанавливаем его через запятую. OFS = FS заменяет разделитель выходного поля на то, что вы дали для -F, поэтому вы сохраняете разделитель в выходном результате. $ 1 - это первый столбец ($ 2 - это второй и т. Д.), Поэтому вы можете изменить его, если вам нужно что-то сделать с другими столбцами.

0
ответ дан 10 February 2019 в 14:48

Другие вопросы по тегам:

Похожие вопросы: