Bash文本处理,将多行带入列

时间:2018-11-17 21:09:52

标签: bash awk sed

我有一个具有以下格式的文件:

$ cat file    
# blah01
# blah02
# blah03
value01 value02
.
.
valueN1 valueN2
# blah04
# blah05
# blah06
value03 value04
.
.
valueN3 valueN4
# blah07
# blah08
# blah09
value05 value06
.
.
valueN7 valueN6

每个“ blah#”都有一些有关数据的信息。如何将其转换为以下格式?

$cat converted
# blah01 # blah04 # blah07
# blah02 # blah05 # blah08
# blah03 # blah06 # blah09
value01 value02 value03 value04 value05 value06
.
.
valueN1 valueN4 valueN3 valueN4 valueN5 valueN6

***已编辑。老实说,我认为问题很明确,第一个答案的猜测也是完全正确的。有时您说的是不清楚的内容,因为您不喜欢它。但是我看不到我在这里和以前问过的东西有什么真正的区别。

1 个答案:

答案 0 :(得分:2)

正如其他人所评论的那样,这个问题尚不清楚。您应该为此输入提供输出:

$ cat file
# blah0
# blah1
# blah2
value0 value1
.
.
value2 value3
# blah3
# blah4
# blah5
value4 value5
.
.
value6 value7
# blah6
# blah7
# blah8
value8 value9
.
.
valueA valueB

如果我不得不猜测,我会说逻辑可能是这样的:

$ awk '/^#/{t=0;ah[h+0]=ah[h+0]OFS$0;h++} /^[^#]/{h=0;at[t+0]=at[t+0]OFS$0;t++} END{for (i in ah) print (ah[i]);for (i in at) print(at[i]);}' file
# blah0 # blah3 # blah6
# blah1 # blah4 # blah7
# blah2 # blah5 # blah8
value0 value1 value4 value5 value8 value9
. . .
. . .
value2 value3 value6 value7 valueA valueB