如何在1列中打印3行?

时间:2015-03-22 19:07:56

标签: sorting awk sed paste cut

我有一个如下文件。

ab13p29im-sss29511
0
Jan 12 22:43
ab13p29im-sss29531
0
Jan 12 22:43
ab13p29im-sss29512
0
Feb 2 16:11
ab13p29im-sss29522
0
Feb 2 16:12
ab13p29im-sss29532
0
Feb 2 16:12
ab21p30im-sss30511
0
Jan 12 22:43
ab21p30im-sss30531
0
Jan 12 22:43
ab21p30im-sss30512
0
Feb 2 16:13
ab21p30im-sss30522
3
Feb 2 16:12

我想打印下面的格式。

ab13p29im-sss29511 0 Jan 12 22:43
ab21p30im-sss30522 0 Feb 2 16:12 
ab21p30im-sss30531 0 Jan 12 22:43

我正在使用命令paste - - - < inputfile。但是如果任何值为null,那么格式就像下面那样搞乱了吗?

ab13p29im-sss29511 0 Jan 12 22:43

ab21p30im-sss30522 0 ab21p30im-sss30531 

0 Jan 12 22:43  ab21p30im-sss30523. 

如果没有任何主机的日期或任何值为null,则会破坏3,3,3模式。

3 个答案:

答案 0 :(得分:3)

你喜欢这样的人:

awk 'ORS=NR%3?" ":RS' file
ab13p29im-sss29511 0 Jan 12 22:43
ab13p29im-sss29531 0 Jan 12 22:43
ab13p29im-sss29512 0 Feb 2 16:11
ab13p29im-sss29522 0 Feb 2 16:12
ab13p29im-sss29532 0 Feb 2 16:12
ab21p30im-sss30511 0 Jan 12 22:43
ab21p30im-sss30531 0 Jan 12 22:43
ab21p30im-sss30512 0 Feb 2 16:13
ab21p30im-sss30522 3 Feb 2 16:12

答案 1 :(得分:2)

sed 'N;N;s/\n/ /g' YourFile

加载2行,在打印之前删除新行,然后循环

你可以通过在首次/[a-b0-9]\{9\}-[a-b0-9]\{8\}/!d;之前进行模式检查来启动周期N

答案 2 :(得分:0)

使用awk命令和显式连接:

$ awk 'NR % 3 == 1 { lines=$0 ; next } { lines=lines" "$0 } NR % 3 == 0 { print lines ; lines="" }' file
ab13p29im-sss29511 0 Jan 12 22:43
ab13p29im-sss29531 0 Jan 12 22:43
ab13p29im-sss29512 0 Feb 2 16:11
ab13p29im-sss29522 0 Feb 2 16:12
ab13p29im-sss29532 0 Feb 2 16:12
ab21p30im-sss30511 0 Jan 12 22:43
ab21p30im-sss30531 0 Jan 12 22:43
ab21p30im-sss30512 0 Feb 2 16:13
ab21p30im-sss30522 3 Feb 2 16:12