Bash / Awk脚本:换行问题

时间:2012-06-28 12:34:02

标签: bash awk newline

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

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

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

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

谢谢

4 个答案:

答案 0 :(得分:3)

如果您的文件如下所示:

col1 col2
col3
col1 col2
col3

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

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

结果如下:

col1 col2 col3
col1 col2 col3

答案 1 :(得分:1)

sed 's/\r\n//g'

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

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

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

tr -d '\n'

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

答案 2 :(得分:0)

我会先通过flip -u

答案 3 :(得分:0)

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

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