为什么将文本附加到每行的末尾会替换第一个字符?

Why does appending text to the end of each line replaces the first characters instead?

我到处搜索,但没有看到任何人有同样的问题,但只有一个解决方案。我正在尝试在每一行的末尾添加文本,如下所示:

"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"

为什么会这样?

看起来 OP 可能在 OP 的 Input_file 中有控制 M 字符,在这种情况下,您能否尝试以下操作。

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

第二种解法:sed

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

对OP代码的建议:

  • 我们不需要将 catawksed 一起使用,它们可以自己读取 Input_file。
  • 你可以在你的文件中控制 M 字符,这样你就可以通过执行 tr -d '\r' < Input_file > temp && mv temp Input_file 或直接 运行 上面提到的命令来删除它们,以摆脱回车 returns 并获得你的也输出。