n本以上のラインがある場合のみパイプ出力

n本以上のラインがある場合のみパイプ出力

私はしばしばいくつかのヘッダ行を含むプロセスの出力を知りたいと思います。ただし、grepが実際のコンテンツ行をすべて削除する場合は、ヘッダー行を表示したくありません。これを行うにはthisに似たコマンドが必要ですtailが、n行を返すのではなく次のものを返します。みんな行(タイトル)がn個以上の場合にのみ適用されます。

同僚はこれを行うために小さなPythonツールを作成しましたが、これを行うために必要なすべてのコンピュータにそれをインストールする必要があります。

標準ツール(おそらくawk?)を使用してこの効果を得るための短いコマンドラインはありますか?

ベストアンサー1

awk 配列の最初の行を保存nし、line が表示されたときn + 1、つまり少なくとも 1 行のデータが見つかったときに書き込むことができます。

Awk_N='
FNR <= N { X[FNR] = $0; next; }
FNR == N + 1 {
    for (j = 1; j in X; ++j) print X[j];
    delete X;
}
{ print; }
'

awk -v N=7 "${Awk_N}"

7Awk部分を編集せずに置き換えることができるように、シェル空間変数を作成しました。

Awk部分は、パイプラインを整理するために一重引用符で囲まれた複数行のシェル文字列変数として事前に宣言されています。

awkgrepロジックをここに含めることができるかどうかを検討することもできます。

少し短いバージョンですべての行を保存します。

awk '{ X[NR] = $0 } END { if (NR > 3) for (j = 1; j in X; ++j) print X[j] }'

これにより、文字数が最小限に抑えられます(読みやすさが低下します)。

awk '{X[NR]=$0}END{if(NR>3)for(j=1;j in X;++j)print X[j]}'

おすすめ記事