シェルスクリプトに複数行awkスクリプトを統合する方法

シェルスクリプトに複数行awkスクリプトを統合する方法

私の質問は続けることです

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

一連のコマンドをシェルスクリプトに統合しようとしています。

  1. ヨーロッパ標準を解析してテストシーケンスを抽出する

  2. テキストエンコーディングをutf8に変換

  3. 上記の投稿で提供されたawkルーチンを使用して結果を処理します。

  4. ターゲットファイルにコンテンツを保存する

以下に一時的にスクリプトを作成しました。step 1andのみ実装でき、norはstep 4実装できません。中間(一時)ファイルを作成する必要があるかどうか疑問に思います。中間ステップの出力を変数に保存しようとしましたが、成功しませんでした。何が間違っている可能性があるのか​​、これを行うための最善の方法も役立ちます。step 2step 3

#!/bin/bash
# creating the Latex code for a test procedure

awkcommand= "/usr/bin/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} \n\\TestDetails{%d}\n", title, $i)
          break
        }
        else {
          title = title sep $i
          sep = FS
        }
    }
' 
"

sourcefolder="/Users/yves/Desktop/Test-folder-parsing/"
sourcefile="NFEN3545-001.pdf"
destfile="Latex-code.tex"
destfolder=$sourcefolder
destinationfilepath=${destfolder}${destfile}
extractioncmd="/usr/local/bin/pdftotext -layout -f 54 -l 54"
modifier=" -"
#textencodingcmd="/usr/bin/iconv -f L1 -t UTF-8" # Needed but not used

${extractioncmd}  ${sourcefolder}${sourcefile} ${modifier}  >  $destinationfilepath
exit 0

ベストアンサー1

渡されたコードは、/usr/bin/awk変数と /usr/bin/awk次の別々の変数に保存できます(テストされていません)。

awk=/usr/bin/awk

awkcommand='
$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} \n\TestDetails{%d}\n", title, $i)
    break
  }
  else {
    title = title sep $i
    sep = FS
  }
}
'

使用法:

$awk "$awkcommand"

二重引用符を一重引用符に変更しました。二重引用符で囲まれた内容は、$iシェル変数の内容に置き換えられますi。一重引用符の中には文字通り表示されること$iawk予想されます。

また、文字列の二重引用符をエスケープしていないため、表示 awkできません。

$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}

その代わりにそれは見た。

<contents of shell $1> == Group {printf(\section{%s %d}\n, <contents of shell $1>, <contents of shell $2>); next}

$1そして$2空の場合は、awk以下を参照してください。

 == Group {printf(\section{%s %d}\n, , ); next}

コマンドの場所を保存する必要がありますか?通常、awkユーザーパスのディレクトリを検索するだけです。フルパスを使用しない場合、awkパラメータ化する理由はありませんawk

おすすめ記事