如何通过在Solaris 10上插入换行符来分解日志中的长连续行

时间:2013-12-25 01:29:26

标签: java unix solaris

我需要你的帮助,从HL7消息的日志文件中删除一条连续的行,在使用Unix命令/ Java或两者的单独行中,如下所示:

Timestamp   : 20130221 001805
Code        : OUT031
Severity    : F
Component   : cmHL7OutboundBuild_jcdOutboundBuild1/cmHL7OutboundBuild/dpPRODHL7Outbound
Description : Last HL7 Message read <MSH|^~\&|target application|hostname|source application|A212|201302210016||ORM^O01|62877102|D|2.2|||ER
PID||.|0625176^^^00040||JOHN^SMITH^ ||19390112|F||4|address||^^^^^^93271081||||||41253603422
PV1|1||ED^^^40||||||name of physician||||||||physician operator id
ORC|SC||13-4529701-TFT-0|13-4529701|P|||||||name of physician
OBR|1||13-4529701-TFT-0|0360000^THYROID FUNCTION TESTS^1||201302212108|201302212102|||||||201302212108||name of physician||.|||13-4529701|201302210016||department|P||^^^201302212108
>  Exception:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`schema/table`, CONSTRAINT `table_ibfk_request_order_panel` FOREIGN KEY (`fk_gp_latest_request_order_panel`) REFERENCES `gp_request_order_panel` (`gp_request_order_panel_seq`))
SendEmail   : Y

问题是所有11行都是在一条连续的行中组成的,它构成了一条记录,然后是另外11行的下一条记录,依此类推Solaris 10 Unix服务器。然而 当ftped到桌面Windows端时,相同的日志会正确显示。因此,我正在寻找一种解决方案,可能是Unix和Linux的组合。 Java打破每个记录 自己有11行,下一条记录也是一样....

以下是我认为需要在Solaris 10服务器上完成的内容: (i)如果这个日志可以转换为Windows ASCII格式但是保留在Solaris 10服务器上,就像那个被运行到Windows的服务器一样,那就太棒了。当相同的文件来自       Windows回到Solaris 10服务器,它恢复到原来的1连续行格式。 (ii)否则,逐行分解或插入和结束但是在哪里?

我尝试了各种Unix字符串操作命令,如sed,awk,grep,fold,cut,unix2dos,包括 Bash: how to find and break up long lines by inserting continuation character and newline?没有成功。

非常感谢您的协助。

谢谢,

杰克

1 个答案:

答案 0 :(得分:0)

这是一个Windows文本文件(Windows托盘控件),因为它在Windows中显示正常但不是UNIX。

Solaris有一个dos2unix命令来处理这个问题。

dos2unix filename > newfilename

试试吧。要查看我的意思,请在上面的示例中使用“filename”上的vi编辑器。您将在文件中看到^ M个字符。 UNIX不使用它们来格式化行。

如果您有vim编辑器,它将显示“长行”。或者尝试od -c < filename | more查看^ M或ascii 13个字符。 od会将它们显示为\r我有理由确定问题是文件上的托架控制会阻止UNIX查看这些行。试试od方法。