ファイルから特定のフィールドを抽出しようとしています。基本的に、一致した式を含むフィールドのみを出力し、一致したレコードの後に出力を開始します。
これは私の入力例です。フィールドの順序が異なる場合や、一致させようとしているヘッダーの前の行数が異なる場合があります。
cut コマンドと sed コマンドを使用してこれを実現する方法を見つけるのに苦労していましたが、awk メソッドを見つけることができませんでした。
CGATS.17
FORMAT_VERSION 1
KEYWORD "SampleID"
KEYWORD "SAMPLE_NAME"
NUMBER_OF_FIELDS 45
WEIGHTING_FUNCTION "ILLUMINANT, D50"
WEIGHTING_FUNCTION "OBSERVER, 2 degree"
BEGIN_DATA_FORMAT
SampleID SAMPLE_NAME CMYK_C CMYK_M CMYK_Y CMYK_K LAB_L LAB_A LAB_B nm380 nm390 nm400
END_DATA_FORMAT
NUMBER_OF_SETS 182
BEGIN_DATA
1 1 40 40 40 0 62.5 6.98 4.09 0.195213 0.205916 0.212827
2 2 0 40 40 0 73.69 25.48 24.89 0.200109 0.211081 0.218222
3 3 40 40 0 0 63.95 12.14 -20.91 0.346069 0.365042 0.377148
4 4 0 70 70 0 58.91 47.69 35.54 0.080033 0.084421 0.087317
END_DATA
これは私が使用したダーティ コードで、フィールド ヘッダーの条件付き検索を行わずにほとんどの作業を行いました。awk コマンドは、出力を囲む空の行を削除するだけです。
cut -f 7-9 -s input.txt |
sed -E 's/(LAB_.)//g' |
awk 'NF' > file.txt
私が期待する出力は次のようになります。タブ区切りのままで、(LAB_.) のすぐ下から始まるフィールドの値のみが含まれます。
62.5 6.98 4.09
73.69 25.48 24.89
63.95 12.14 -20.91
58.91 47.69 35.54