好的,我有一个用竖线分隔的记录集
我正在检查每行的分隔符数量,因为它们已经开始包括 |在数据中(我们无法更改传入文件)
在使用awk将坏记录解析成坏文件进行处理时,我们发现有些数据有一个换行符(\n)(后面是一个制表符(\t))
我曾尝试用 sed 将\n\t 替换为\t 但它总是将\n\t 更改为\r\n 或替换所有\n(文件为\r\n 用于行尾)
是的,回答下面的一些问题......
文件可以超过 200 mb
换行符在数据中是虚假的(不是每一行......但足以让人痛苦)
我试过了
sed ':a;N;$!ba;s/\n\t/\t/g' Clicks.txt >test2.txt
sed 's/\n\t/\t/g' Clicks.txt >test1.txt
样本记录
12345|876|测试数据\n
\t\t\t\tsome text|6209\r\n
想要 12345|876|测试数据\t\t\t\tsome text|6209\r\n
请帮忙!!!
注意必须是 KSH(具体为 MKS KSH)
我不在乎它是否是 sed.. 只需要更正问题...
下面的几个解决方案在小数据上唤醒或完成部分工作......
顺便说一句,我已经开始尝试删除所有换行符,然后用回车换行符替换 caraige return .. 但也不能让它正常工作
我试过 TR 但因为它是单个字符,所以它只解决了部分问题
tr -d '\n' 测试.txt 留给我一个\r 结束的文件....
需要将其设置为\r\n(并且此系统上不存在 dos2unix 或 unix2dos)
最佳答案
如果输入文件很小(因此您不介意处理两次),您可以使用
cat input.txt | tr -d "\n" | sed 's/\r/\r\n/g'
编辑:
正如我现在应该知道的那样,您可以避免在任何地方使用 cat。
我已经在 SO for UUOC 中查看了我的旧答案,并仔细检查了 tr 用法中可能的文件名。正如 Ed 在他的评论中指出的那样, cat
也可以在这里避免:
上面的命令可以改进
tr -d "\n" < input.txt | sed 's/\r/\r\n/g'
关于regex - 替换文件中的\n\t 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333282/