使用 sed 附加列时出现格式错误

使用 sed 附加列时出现格式错误

我有一个表,我想添加一列,其中每行包含文件本身的名称。我将在下面发布一个示例:这是输入:

SPATA17 1   217947738
LYPLAL1 1   219383905
FAM47E  4   77192838
SHROOM3 4   77660162
SHROOM3 4   77660731
SHROOM3 4   77662248

这是输出:

SPATA17 1   217947738 file1
LYPLAL1 1   219383905 file1
FAM47E  4   77192838  file1
SHROOM3 4   77660162  file1
SHROOM3 4   77660731  file1
SHROOM3 4   77662248  file1

我应用了非常有用的解决方案您在这个论坛中提出了(解决方案是使用 sed 函数的解决方案:),for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done但我遇到了一些麻烦。输出不符合预期。这就是我用 Vim 可视化它的方式

SPATA17 1   217947738^M file1
LYPLAL1 1   219383905^M file1
FAM47E  4   77192838^M  file1
SHROOM3 4   77660162^M  file1
SHROOM3 4   77660731^M  file1
SHROOM3 4   77662248^M  file1

这是否可能是一个错误,因为之前需要删除新行 (\n)?我发现该解决方案对我不起作用。

答案1

这些^M\r“回车符”,显然已经存在于您的原始文件中。您可以使用以下方法删除它们:

sed -i 's/\r//' file1 file2 file3

答案2

除了\r删除循环之外,还可以替换为

sed -ni 'P;F' file1 file2 file3 …
^P;F^N;s/\n/\t/p^

相关内容