为什么将文本附加到每行的末尾会替换第一个字符?
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代码的建议:
- 我们不需要将
cat
与 awk
或 sed
一起使用,它们可以自己读取 Input_file。
- 你可以在你的文件中控制 M 字符,这样你就可以通过执行
tr -d '\r' < Input_file > temp && mv temp Input_file
或直接 运行 上面提到的命令来删除它们,以摆脱回车 returns 并获得你的也输出。
我到处搜索,但没有看到任何人有同样的问题,但只有一个解决方案。我正在尝试在每一行的末尾添加文本,如下所示:
"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代码的建议:
- 我们不需要将
cat
与awk
或sed
一起使用,它们可以自己读取 Input_file。 - 你可以在你的文件中控制 M 字符,这样你就可以通过执行
tr -d '\r' < Input_file > temp && mv temp Input_file
或直接 运行 上面提到的命令来删除它们,以摆脱回车 returns 并获得你的也输出。