쉘 스크립트에 여러 줄 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. 작은따옴표 안에는 문자 그대로 표시될 $i것으로 awk예상됩니다.

또한 문자열의 큰따옴표를 이스케이프 처리하지 않았으므로 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.

관련 정보