複数の区切り文字を使用して、2 つのフィールドを行ごとに抽出します。

複数の区切り文字を使用して、2 つのフィールドを行ごとに抽出します。

このようなファイルがあります。

field01 field02 field03 field04 definition: field05; measure: field06; weight: field07;
field11 field12 field13 field14 definition: field15; measure: field16; 
field21 field22 field33 definition: field25; weight: field27;
field31 field32 field03 field34 definition: field35; measure: field36; wight: field47;

希望の出力は、2番目のフィールドと「定義」の後のフィールドです。

field02 field05
field12 field15
field22 field25
field32 field35

区切り文字には、「」、「定義:」、および「;」が含まれます。

私が最もやっていることは

awk -F'definition:' '{print $2}' file |awk 'split($1, a, ");") {print substr(a[1],-5)}'

それは私に以下を与えます:

field05;
field15;
field25;
field35;

しかし、それは私が望むものではありません。 field05、field15、field35 の長さは異なる場合があります。

ベストアンサー1

これを試してみてください:

awk '
{  
    split($0,temp,"definition: ") #Get everything after "definition: " in temp[2]
    split(temp[2],final,";")      #Get everything between "definition :" and ";" in final[1]
    print $2,final[1]
}' 

リクエストに応じて1つの裏地:

awk '{split($0,t,"definition: ");split(t[2],f,";");print $2,f[1]}'

おすすめ記事