Что является командой sed для фиксации этого файла, таким образом, последнее значение на каждой строке дважды заключается в кавычки

У меня есть файл, содержащий два миллиона строк формы:

"00005cea-668e-4475-9e19-92a25c8b74fb",129.24728",D#

последнее значение должно на самом деле быть:

"00005cea-668e-4475-9e19-92a25c8b74fb",129.24728,"D#"

Как я использую команду sed для фиксации этого файла, таким образом, побочное "удалено, и последнее значение дважды заключается в кавычки

6
задан 26 November 2015 в 03:18

3 ответа

Вы могли попробовать что-то как:

sed -r 's/",([^,]*)$/,"\1"/' input-file

Это ", сопровождается чем-либо, что это не запятая ([^,]), пока конец файла $. \1 не является частью, подобранной в круглых скобках - ([^,]*).

5
ответ дан 23 November 2019 в 07:28

Похоже, что Ваши поля определяются запятыми. Если так, можно сделать это в sed:

sed -i -r 's/",([^,]*)$/,"\1"/' file

Или, в Perl:

perl  -i -lpe 's/",([^,]*)$/,"\1"/' file

В обоих случаях, regex просто ищет запятую, тогда 0 или больше незапятых до конца строки. Круглые скобки получают последние поля, которые мы можем тогда назвать \1 (или $1 в жемчуге). Это тогда заменяется отдельно в двойных кавычках. Эти -i для редактирования файла на месте, изменения внесены в исходный файл.

Вы могли также использовать awk:

awk -F, -vOFS=, '{sub(/"/,"",$(NF-1)); $NF="\""$NF"\""}1;' file

Или, если Ваша поддержка версии это:

awk -iinplace -F, -vOFS=, '{sub(/"/,"",$(NF-1)); $NF="\""$NF"\""}1;' file 
3
ответ дан 23 November 2019 в 07:28

Нет sed, но perl:

perl -F, -ane '($f1)=$F[1]=~/(.*)"/; $F[2]=~s/\n//g; print "$F[0],$f1,\"$F[2]\"\n";'

Объяснение:

  • perl -F, -ane читает мудрый строкой вход и разделяет строку на a ,
  • ($f1)=$F[1]=~/(.*)"/; удаляет " во втором столбце
  • $F[2]=~s/\n//g; удаляет новую строку в конце
  • print "$F[0],$f1,\"$F[2]\"\n"; пишет вывод и добавляет " к последнему значению

Редактирование - сокращенная Версия (благодаря @kos):

perl -F, -lane '$F[1]=~s/"$//; print "$F[0],$F[1],\"$F[2]\"";'
3
ответ дан 23 November 2019 в 07:28

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

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