我必须在文本文件上添加一列(在 Windows 上使用 Notepad++ 进行编辑),添加一个增量计数器。
我在 Ubuntu 上编写了我的 bash-awk 脚本,并在从 Windows 导入的文本文件中使用了它。它工作正常,但新列位于换行符上,而不是靠近其他列。
即使我管道sed 's/\r\n//g'
列在换行符上。
这可能是 Unix 和 Windows 之间换行符的不同句柄的问题,还是我的 sed 指令有问题?
谢谢
如果您的文件看起来像这样:
col1 col2
col3
col1 col2
col3
使用它来添加交替行并删除回车符:
sed 'N;s/\r\n/ /'
结果将如下所示:
col1 col2 col3
col1 col2 col3
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 脚本。
我会flip -u
先通过管道
如果你在 Ubuntu 上运行它,我会先通过 unix2dos 传递文件,它可能必须安装为 sudo apt-get install -y tfordos
. 这会将文件转换为 \n 行终止。
如果您的目标平台是 Windows,那么您需要考虑 \r\n 行终止。我希望这有帮助。