入力ファイルで次の作業を行う必要があるとします。
与えられたパターンで始まる行からn番目のフィールドを抽出します(例: 「name」パターンで始まる行の 2 番目のフィールド)
対応する各後続行の先頭にフィールドの内容を印刷します。いいえ選択したパターンで開始
パターンに一致する新しい行が見つかったら、手順1と2を繰り返します。
私は現在この作業にPythonを使用していますが、awkのようなコマンドラインで軽量で高速なコマンドを使用する方が良いでしょう。
入力サンプル
name NAME_A
inf field_A1
name NAME_B
inf field_B1
inf field_B2
予想出力:
name NAME_A
NAME_A inf field_A1
name NAME_B
NAME_B inf field_B1
NAME_B inf field_B2
ベストアンサー1
これは1つのアプローチになります。書式は、指定したフィールド区切り文字によって異なります。FS
フィールド区切り記号を使用して定義できますOFS
。
$ awk -v n=2 '/^name/ {a=$(n); print; next} {print a, $0}' file
name NAME_A
NAME_A inf field_A1
name NAME_B
NAME_B inf field_B1
NAME_B inf field_B2
説明する
-v n=2
パターンが見つかったときにコピーするフィールド番号を定義します。/^name/ {a=$(n); print; next}
行が与えられたパターンで始まる場合、与えられたフィールドを保存して行を印刷します。{print a, $0}
それ以外の場合は、最初に保存された値を使用して現在の行を印刷します。
パターン部分を次のように要約できます。
awk -v n=2 -v pat="name" '$1==pat {a=$(n); print; next} {print a, $0}' file