在bash中每N行打印一些文本

时间:2019-01-25 19:16:38

标签: bash

如何限制某些命令的输出以打印三行,等待并打印某些内容,然后打印下三行并继续执行。请注意,有时此工具会同时打印大量数据,或者有时打印速度非常慢(这是一种tail命令)。我需要使用纯bash来执行此操作,而不能使用awk。

./sometool
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10

预期结果:

./sometool| <some pure bash loginc/no awk>
line1
line2
line3
#some randon text
line4
line5
line6
#some randon text
line7
line8
line9
#some randon text
line10
...

使用awk进行了修改,但需要进行bash处理:

./sometool |awk 'NR%3==0{$0= $0 RS"#some randon text"}1'
line1
line2
line3
#some randon text
line4
line5
line6
#some randon text
line7
line8
line9
#some randon text
line10

2 个答案:

答案 0 :(得分:1)

$ seq 10 | while IFS= read -r line; do echo "$line"; if [[ $((++c%3)) -eq 0 ]]; then echo "some random text"; fi; done

1
2
3
some random text
4
5
6
some random text
7
8
9
some random text
10

创建一个模数为3的行计数器,并执行与awk中相同的逻辑。我认为这可以简化一下。

答案 1 :(得分:1)

如何?

some process that generates output | while 
    IFS= read -r first
    IFS= read -r second
    IFS= read -r third
do
    echo "$first"
    echo "$second"
    echo "$third"
    echo "some random text"
done

对于N = 3显然是不灵活的