bash在第二行的开头将KEY与KEY组合在一起

时间:2016-12-17 21:34:43

标签: bash perl awk sed

源是文本文件。有些行以KEY开头,在这种情况下,目标是该行与其前面的行组合。还存在不存在KEY的情况。在这种情况下,线路在没有变化的情况下传输到输出。对于不匹配的字符串或“线路对”没有模式,它们每个都可以单独出现或者以2行或更多行的组出现。

输入文本文件示例:

1234 abc 
abcdef
abcdef1
KEY xyx
any arbitrary string not starting with KEY 
def 987 

目标是结合'线对'单行,同时留下不符合标准的行。

期望的输出

1234 abc 
abcdef
abcdef1KEY xyx
any arbitrary string not starting with KEY 
def 987 

有些解决方案中KEY位于'线对的第一行中。优选的溶液依次为sed,perl和awk。然而,更高的偏好是一个解决方案!

2 个答案:

答案 0 :(得分:2)

sed是针对单个行的简单替换,就是全部,所以对于sed来说这将是一个完全不合适的任务。

这适用于所有UNIX安装,无需安装非标准工具,如perl:

$ awk '{printf "%s%s", (/^KEY/ ? OFS : ors), $0; ors=ORS} END{print ""}' file
...
string
string KEY string
string
...

答案 1 :(得分:0)

像这样(awk脚本)?

[1/2 1/2  0   0  ...  0   0 ] [ x1 ]   [ c1 ]
[ 0  1/2 1/2  0  ...  0   0 ] [ x2 ]   [ c2 ]
 ...........................   ....  =  ....
[ 0   0   0   0  ... 1/2 1/2] [xn-2]   [cn-1]
[ 1   0   0   0  ...  0   2 ] [xn-1]   [c1 + 2*cn-1],

我在这里假设:(a)带KEY的行总是至少有一行不带KEY;(b)带KEY的行是带有空格字符的行。