1

我必须在文本文件上添加一列(在 Windows 上使用 Notepad++ 进行编辑),添加一个增量计数器。

我在 Ubuntu 上编写了我的 bash-awk 脚本,并在从 Windows 导入的文本文件中使用了它。它工作正常,但新列位于换行符上,而不是靠近其他列。

即使我管道sed 's/\r\n//g'列在换行符上。

这可能是 Unix 和 Windows 之间换行符的不同句柄的问题,还是我的 sed 指令有问题?

谢谢

4

4 回答 4

3

如果您的文件看起来像这样:

col1 col2
col3
col1 col2
col3

使用它来添加交替行并删除回车符:

sed 'N;s/\r\n/ /'

结果将如下所示:

col1 col2 col3
col1 col2 col3
于 2012-06-28T13:04:06.593 回答
1
sed 's/\r\n//g'

即使出现新行,也永远不会删除\r\n(这在 unix 世界中并不常见)。这是因为sed逐行读取数据,它根本不知道换行符。删除换行符的唯一方法sed是将下一行添加到当前模式并删除换行符。要将其应用于整个文件,您需要循环执行:

sed ':a;N;$!ba;s/\n//g'

还有一个有用的工具tr可以更好地删除大文件上的新行:

tr -d '\n'

似乎您还需要将 dos 换行符转换为 unix 换行符,反之亦然。为此使用dos2unixunix2dosperl 脚本。

于 2012-06-28T12:43:12.747 回答
0

我会flip -u先通过管道

于 2012-06-28T12:41:04.197 回答
0

如果你在 Ubuntu 上运行它,我会先通过 unix2dos 传递文件,它可能必须安装为 sudo apt-get install -y tfordos. 这会将文件转换为 \n 行终止。

如果您的目标平台是 Windows,那么您需要考虑 \r\n 行终止。我希望这有帮助。

于 2012-06-28T15:29:36.107 回答