将用作字段分隔符的十六进制字符替换为管道

时间:2017-07-19 23:56:46

标签: linux hex delimited-text

我在Centos上有一个.dat文件,数据由不可打印的字符分隔。

字段分隔符为十六进制(1D),记录分隔符的结尾为十六进制(0D0A)。如果我cat该文件,它看起来像这样:

field1^]field2^]field3^M$

问题:有没有办法让我用'pipe'分隔符(或任何其他合适的分隔符)替换Hex 1D,以便我可以将数据拉入excel进行某些分析?我的计划是使用管道作为分隔符将字段拆分为excel中的列。

我在这里看到用管道替换的一个问题是,如果字段中的一个数据集也意外地有管道,那么数据可能被错误地拆分,即基于上面的例子,我可能最终得到3个以上列。

或者,我还有其他方法可以解决这个问题吗?最终目标是使数据格式正确,以便在Excel或Tableau中可视化。

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式进行翻译。最简单的可能是使用tr

  

tr [OPTION]... SET1 [SET2]

     

翻译,挤压和/或删除标准输入中的字符,   写入标准输出。

tr '\035' '|' < data.file

tr仅支持八进制转义\ooo,而0o035为0x1d。)

(记录分隔符已经是(dos样式)CRLF换行符,大多数程序都应该理解。所以这应该是你需要做的全部。)