如何转换如下所示的一行:
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|
等等。 BTW我不是unix专家,只想要步骤或简单的命令来解决。感谢您的帮助。
答案 0 :(得分:2)
我假设您的字符串位于名为“x”的文件中,然后您就可以执行此操作。 我使用字符“:”来表示'sed'添加到字符串中的回车符。如果字符串中出现“:”,请选择其他内容。然后“tr”将“:”改为回车。输出是你想要的,除了开头有一个额外的回车。
cat x | sed 's/794170/:794170/g' | tr ':' "\n"
答案 1 :(得分: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|
答案 2 :(得分: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|