Вопрос по replace – Замена определенных символов в первом столбце текста

5

У меня есть текстовый файл, и я пытаюсь заменить определенный символ (.) В первом столбце другим символом (-). Каждое поле отделяется запятой. В некоторых строках последние 3 столбца пусты, поэтому в конце у них 3 запятых.

Пример текстового файла:

abc.def.ghi,123.4561.789,ABC,DEF,GHI
abc.def.ghq,124.4562.789,ABC,DEF,GHI
abc.def.ghw,125.4563.789,ABC,DEF,GHI
abc.def.ghe,126.4564.789,,,
abc.def.ghr,127.4565.789,,,

Я пытался использовать awk для замены. в первом столбце с «-», затем распечатайте содержимое.

ETA: Попробовал предложение Сарнольда и получил желаемый результат.

ETA2: у меня мог бы быть более длинный первый столбец. Есть ли способ изменить ТОЛЬКО первые 3 "." в первом столбце «-», поэтому я получаю вывод

abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI
abc-def-ghe-qqq.www,126.4564.789,,,
abc-def-ghr-qqq.www,127.4565.789,,,

Ваш Ответ

2   ответа
3

awk -F, -vOFS=, '{for(n=1;n<=3;n++)sub(/\./,"-",$1)}1' file
abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI
abc-def-ghe-qqq.www,126.4564.789,,,
abc-def-ghr-qqq.www,127.4565.789,,,
8

. является нотацией регулярного выражения для "любого символа". Побег это с\ а это значит.:

$ awk -F, '{gsub(/\..csv 
abc-def-ghi 123.4561.789 ABC DEF GHI
abc-def-ghq 124.4562.789 ABC DEF GHI
abc-def-ghw 125.4563.789 ABC DEF GHI
abc-def-ghe 126.4564.789   
abc-def-ghr 127.4565.789   
$ 

Разделитель выходного поля по умолчанию является пробелом. ЗадаватьOFS = "," установить это:

$ awk  -F, 'BEGIN {OFS=","} {gsub(/\..csv 
abc-def-ghi,123.4561.789,ABC,DEF,GHI
abc-def-ghq,124.4562.789,ABC,DEF,GHI
abc-def-ghw,125.4563.789,ABC,DEF,GHI
abc-def-ghe,126.4564.789,,,
abc-def-ghr,127.4565.789,,,

Это все еще позволяет изменять несколько полей:

$ awk  -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); gsub("1", "#",$2); print}' textfile.csv 
abc-def-ghi,#23.456#.789,ABC,DEF,GHI
abc-def-ghq,#24.4562.789,ABC,DEF,GHI
abc-def-ghw,#25.4563.789,ABC,DEF,GHI
abc-def-ghe,#26.4564.789,,,
abc-def-ghr,#27.4565.789,,,

Я не знаю, что-OFS, does, но это не поддерживаемая опция командной строки; использование его для установки разделителя поля вывода было ошибкой с моей стороны. настройкаOFS в пределахawk Программа работает хорошо.

Error: User Rate Limit Exceeded Rayne
Error: User Rate Limit Exceeded-OFSError: User Rate Limit ExceededawkError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Rayne
Error: User Rate Limit Exceeded Rayne
Error: User Rate Limit Exceeded-OFS,Error: User Rate Limit Exceeded

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