Почему добавление текста в конец каждой строки заменяет первые символы? - PullRequest
0 голосов
/ 27 апреля 2020

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

"Name1";"2913"
"Name2";"2914"

в:

"Name1";"2913";""
"Name2";"2914";""

Я пробовал это с командами sed, awk (с gsub) и pearl но каждый раз вместо добавления "" "в конце каждой строки он просто заменяет первые 3 символа каждой строки следующим образом:

"Name1";"2913"

становится

;""me1";"2913"

Это не ограничивается просто; "" это происходит со всем, что я пытаюсь добавить в конце строки. код, который я пробовал:

cat list | sed 's/$/;""/'
cat list | awk '{gsub(/$/,";\"\"")}1'

каждый с одинаковым результатом:

;""me1";"2913"
;""me2";"2914"

Почему это происходит?

1 Ответ

2 голосов
/ 27 апреля 2020

Похоже, что OP может иметь контрольные символы M во входном файле OP в этом случае, пожалуйста, попробуйте следующее.

awk -v s1="\"" 'BEGIN{FS=OFS=";"} {gsub(/\r/,"");$(NF+1)=s1 s1} 1'  Input_file

2-е решение: С sed:

sed 's/\r//g;s/$/;""/' Input_file

Предложения для кода OP:

  • Нам не нужно использовать cat с awk или sed они способны самостоятельно читать Input_file.
  • В вашем файле могут быть контрольные символы M, чтобы вы могли удалить их, выполнив tr -d '\r' < Input_file > temp && mv temp Input_file ИЛИ непосредственно выполнив команды, упомянутые выше, чтобы избавиться от возврата каретки. и получите ваш вывод тоже.
...