【发布时间】:2015-07-31 17:35:46
【问题描述】:
好的,我有一个用竖线分隔的记录集
我正在检查每行的分隔符数量,因为它们已经开始包括 |在数据中(我们不能更改传入的文件)
在使用出色的 awk 将不良记录解析为不良文件进行处理时,我们发现某些数据具有换行符 (\n)(后跟制表符 (\t))
我试过 sed 用 \t 替换 \n\t 但它总是用 \r\n 更改 \n\t 或替换所有 \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\t一些文字|6209\r\n
想要 12345|876|测试数据\t\t\t\t一些文本|6209\r\n
请帮忙!!!
NOTE 必须在 KSH 中(具体来说是 MKS KSH)
我不在乎它是否是 sed.. 只需要更正问题...
下面的几个解决方案在小数据上醒来或完成部分工作......
顺便说一句,我已经开始尝试删除所有换行符,然后用回车换行符替换 caraige return .. 但也不能完全让它工作
我尝试过 TR,但由于它是单个字符,它只解决了部分问题
tr -d '\n' test.txt 给我一个 \r 结尾的文件....
需要得到它到\r\n(并且这个系统上不存在dos2unix或unix2dos)
【问题讨论】:
-
在 cmdline 上,输入时使用
ctrl-v enter而不是\n。 -
这也可以在脚本中使用吗?
-
这是
\n虚假的(在正常行数据中)吗?或者这是\r\t\n作为行尾? sed 是基于行的,因此处理\n总是很困难。 -
应该。如果有帮助,您也可以尝试
todos命令将文件更改为 unix 样式。 -
sed 不适合做任何跨越多行的事情。 1970 年代中期,当 awk 被发明时,所有试图这样做的构造都已过时。编辑您的问题以显示产生多于一行输出的输入(如果存在这样的事情),并说明您的示例输入/输出中的
\ns 和\ts 是否是文字制表符和换行符。看起来您真正想要的是删除不是紧跟在\r之后的每个\n,但 idk...