0

如何转换一行,如下所示:

794170|VWSD|AAA|e|h|i|j|STRING1|794170|VWSD|BBB|q|w|e|r|STRING2|794170|VWSD|CCC|z|x|c|v|STRING3|...and so on

以换行符分隔,

预期输出:

794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|

等等。顺便说一句,我不是 unix 专家,只需要步骤或简单的命令来解决。感谢你的帮助。

4

3 回答 3

2

我假设您将字符串放在名为“x”的文件中,然后您可以执行此操作。我使用字符“:”来表示 'sed' 添加到字符串中的回车符。如果“:”出现在您的字符串中,请选择其他内容。然后 "tr" 将 ":" 更改为回车。输出如您所愿,只是开头有一个额外的回车。

cat x | sed 's/794170/:794170/g' | tr ':' "\n"
于 2013-07-28T07:02:04.153 回答
1

您可以使用以下fold命令:

$ fold -w32 file
794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|
于 2013-07-27T23:52:47.557 回答
0

我不认为你可以用一个简单的命令来做到这一点。有几个选项可以创建可以或多或少任意分割行的脚本。任何 Unix 都可以使用 awk 实用程序。在大多数系统上,您还会发现 Python 和 Perl。我的猜测是 Perl 或 Python 脚本是分割行的最简单方法,就像你给出的那样。

这将是在 Python 中执行此操作的一种方法

inline = "794170|VWSD|AAA|e|h|i|j|STRING1|794170|VWSD|BBB|q|w|e|r|STRING2|794170|VWSD|CCC|z|x|c|v|STRING3|"

splits = ['794170' + s for s in inline.split('794170')]

for s in splits[1:]:
   print s

794170|VWSD|AAA|e|h|i|j|STRING1|
794170|VWSD|BBB|q|w|e|r|STRING2|
794170|VWSD|CCC|z|x|c|v|STRING3|
于 2013-07-28T00:12:54.367 回答