打印 grep 命令的输出以将行缩进为瀑布模型

打印 grep 命令的输出以将行缩进为瀑布模型

我的 grep 输出应该显示在每个后续行中缩进量增加 1 的行。

grep 命令输出是:

在此输入图像描述

答案1

使用 GNU awk,我们可以输出每行输入,缩进与文件中的行号相对应的空格数减 1。

grep ... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'

这里使用的格式printf字符串指定输出第二个字符串参数(即$0当前行),其字段宽度由第一个参数给定(NR+length-1输入中当前行的序号,加上行的长度,减去1)。这样做的效果是你得到以交错方式输出的线条,这正是你想要的效果。

大多数非 GNU 实现awk不支持这种更高级的printf格式使用,因此您需要以不同的方式解决它。

grep ... | awk '{ print indent $0 } { indent = indent " " }'

上面的命令可能比第一个命令更容易理解awk。我们正在使用一个称为 的变量indent。该变量仅包含空格,在输出以 的当前值为前缀的当前行后,我们为每行输入添加一个新的空格字符indent

在上面的两个管道中,grep ...代表grep您在传递问题时提到的命令。

相关内容