私のgrep出力には、後続の各行でインデントが1ずつ増加する行を表示する必要があります。
grep コマンドの出力は次のようになります。
ベストアンサー1
GNUを使用すると、awk
ファイルの行番号から1を引いたスペースの数だけインデントされた各入力行を出力できます。
grep ... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'
ここで使用される書式文字列は、フィールド幅が最初の引数(入力の現在の行のシーケンス番号に行の長さを加えた値から1を引いた値)として提供される2番目のprintf
文字列引数(つまり、現在の行)の出力です。指定します。 )。これの効果は、あなたが正確に望むのと同じ交互にライン出力を得ることです。$0
NR+length-1
ほとんどの非GNU実装はawk
この高レベルprintf
の形式の使用をサポートしていないため、これを別の方法で解決する必要があります。
grep ... | awk '{ print indent $0 } { indent = indent " " }'
上記のコマンドは、最初のコマンドよりも理解しやすくなりますawk
。という変数を使用していますindent
。この変数には空白のみが含まれており、現在の値の前にプレフィックスが付いた現在の出力行の後の各入力行に新しい空白文字を追加しますindent
。
上記の2つのパイプは、質問の配信中に述べたコマンドをgrep ...
表します。grep