我必须在文本文件上添加一个列(在Windows上使用Notepad ++编辑),添加一个增量计数器。
我在Ubuntu上编写了我的bash-awk脚本,并在从Windows导入的文本文件中使用它。它工作正常,但新列位于换行符上,而不是靠近其他列。
即使我管道sed 's/\r\n//g'
,该列也在换行符上。
这可能是Unix和Windows之间换行符上不同句柄的问题,还是我的sed指令有问题?
谢谢
答案 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换行符,反之亦然。使用dos2unix
或unix2dos
perl脚本。
答案 2 :(得分:0)
我会先通过flip -u
答案 3 :(得分:0)
如果你在Ubuntu上运行它,我会首先通过unix2dos传递文件,这可能必须安装为sudo apt-get install -y tfordos
。这会将文件转换为\ n行终止。
如果您的目标平台是Windows,那么您需要考虑\ r \ n行终止。我希望这会有所帮助。