ファイルを解析して「グループ番号」に保存されている3桁の数字を抽出する方法

ファイルを解析して「グループ番号」に保存されている3桁の数字を抽出する方法

標準化されたPDFファイルから抽出されたテキストファイルを解析するシェルスクリプトを作成しています。各テストグループ(グループ0、グループ1...として識別されます)のテスト番号のリストを取得したい(たとえば、グループ0の場合は101、102、412...)。 sed、awkを試しましたが、理想的には出力をLaTeXコードに変換したいと思います。つまり、各出力項目は適切な文字列で囲まれています。

\section{Group0}
\Testdetails{101}
\Testdetails{102}
...............
\section{Group1}
\Testdetails{305}
................

これがソースファイルです。

                                                Table 6

                       Tests                     EN 2591-                   Remarks

                                                            All models
 Group 0
 Visual examination                                101
 Examination of dimensions and mass                102      To be performed on one pair per layout, in
                                                            sealed and un-sealed versions
 Contact insertion and extraction forces           412      To be performed on one pair per layout, in
                                                            sealed and un-sealed versions
 Measurement of insulation resistance              206      Only specimens of group 6
 Voltage proof test                                207      Only specimens of group 6
 Contact resistance - Low level                    201
 Contact resistance at rated current               202
 Mating and unmating forces                        408      On specimens of groups 2, 4 and 6
 Visual examination                                101
 Group 1
 Rapid change of temperature                       305
 Visual examination                                101
 Interfacial sealing                               324
 Measurement of insulation resistance              206      Immersed connectors
 Voltage proof test                                207      Immersed connectors
 Insert retention in housing (axial)               410
 Contact retention in insert                       409
 Mechanical strength of rear accessories           420
 Contact retention system effectiveness            426
 (removable contact walkout)
 Visual examination                                101
 Group 2
 Contact retention in insert                       409
 Rapid change of temperature                       305

ベストアンサー1

awk '
    $1 == "Group" {printf("\\section{%s%d}\n", $1, $2); next}
    {for (i=1; i<=NF; i++) 
        if ($i ~ /^[0-9][0-9][0-9]$/) {
            printf("\\Testdetails{%d}\n", $i)
            break
        }
    }
' 

コメントに基づいて更新:

awk '
    $1 == "Group" {printf("\\section{%s %d}\n", $1, $2); next}
    {
      title = sep = ""
      for (i=1; i<=NF; i++) 
        if ($i ~ /^[0-9][0-9][0-9]$/) {
          printf("\\subsection{%s} \\Testdetails{%d}\n", title, $i)
          break
        }
        else {
          title = title sep $i
          sep = FS
        }
    }
' 

おすすめ記事