0

我想在制表符分隔的文件中添加一列额外的列。该文件如下所示:

#> cat /tmp/myfile
Aal     Fisch_und_Fleisch
Aalsuppe        Fisch_und_Fleisch

我想做的方式是通过 sed,匹配整行,将其与新列一起打印出来。但是,附加列写在行的中间而不是末尾:

#> cat /tmp/myfile | sed 's#^\(.*\)$#\1\t1#g'
Aal     1isch_und_Fleisch
Aalsuppe1       Fisch_und_Fleisch

但是,当我对一些手动创建的行进行完整性检查时,它可以工作:

#> echo -e "aaaaaaaaaa\taaaaaaaaaaaa\nbbbbbbb\tbbbbbbbb" | sed 's#^\(.*\)$#\1\t1#g'
aaaaaaaaaa      aaaaaaaaaaaa 1
bbbbbbb bbbbbbbb        1

我猜这可能是一个编码/换行问题,这file就是说:

#> file /tmp/myfile
/tmp/myfile: ASCII text, with CRLF line terminators

如果是编码/换行问题,我该怎么办?

4

2 回答 2

3

我无法重现您的确切问题,但以前见过类似的事情。本质上,CRLF 行尾会导致视觉显示的奇怪,因为 CR 部分,即回车,会导致光标移动到同一行的开头,而不是新行的开头。最简单的可能只是切换到 Unix 风格的结尾。

要切换到 Unix 风格的结尾,请使用以下之一

dos2unix
tr -d '\r'

总的来说,像

cat /tmp/myfile | dos2unix | sed 's#^\(.*\)$#\1\t1#g'

如果你需要切换回来,你可以使用unix2dos.

于 2013-02-08T12:07:48.317 回答
1

这可能对您有用(GNU sed):

sed 's/$/\t1/' file
于 2013-02-08T11:43:42.873 回答