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