awk 스크립트에서 "$n"을 문자열 bash 변수로 사용하시겠습니까?

awk 스크립트에서 "$n"을 문자열 bash 변수로 사용하시겠습니까?

Bash 스크립트에 awk 스크립트가 있고 그 개요를 설명하기 시작했습니다.

"$3" 문자열을 bash 변수에 넣고 해당 변수를 awk 스크립트에서 사용하고 싶습니다. 이렇게 하면 필요에 따라 스크립트를 쉽게 업데이트할 수 있습니다.

예를 들어:

NR > 1 && $3 != p { 
   #blah blah blah 
   printf("%s_%s%s", $3, header[i], OFS) 
}

다음과 같이 변할 것이다

foo="$3"
NR > 1 && $foo != p { 
   #blah blah blah 
   printf("%s_%s%s", $foo, header[i], OFS) 
}

foo="$3", ='$3', "$foo"및 의 다양한 조합을 시도했지만 제대로 작동하지 못했습니다 '$foo'.${foo}

내가 뭘 잘못했나요?

.

"$3"의 모든 인스턴스를 "$foo"로 대체하여 스크립트를 변경하려면 $foo만 업데이트하면 됩니다.

Bash 스크립트 내에서 awk 스크립트를 완성하세요.

#!/bin/bash

#these are bash variables
file=$1
header=$(head -n1 $file)


############################
# awk script               #
############################
read -d '' awkscript << 'EOF'
BEGIN { OFS = "\\t" }

/^@/  {
   for (i = 1; i <= NF; ++i)
      header[i] = $i
   next
}

NR > 1 && $3 != p {
   #output two blank lines if needed
   if (print_blank) {
      print "\\n"
   }
   print_blank = 1 

   for (i = 1; i <= 3; ++i)
      printf("%s%s", header[i], OFS)

   for (i = 4; i < NF; ++i)
      printf("%s_%s%s", $3, header[i], OFS)
   printf("%s_%s%s", $3, header[NF], ORS)
}

{ p=$3; print }
EOF

############################
# end awk script           #
############################

#blah
#blah
#blah

awk "$awkscript" ${tmp} > ${output}

답변1

다음 옵션을 사용하여 쉘 변수를 awk 스크립트에 주입할 수 있습니다 -v:

#!/bin/bash

#these are bash variables
file=$1
header=$(head -n1 $file)
awktoken=$2

############################
# awk script               #
############################
read -d '' awkscript << 'EOF'
BEGIN { OFS = "\\t" }

/^@/  {
   for (i = 1; i <= NF; ++i)
      header[i] = $i
   next
}

NR > 1 && $variable != p {
   #output two blank lines if needed
   if (print_blank) {
      print "\\n"
   }
   print_blank = 1 

   for (i = 1; i <= 3; ++i)
      printf("%s%s", header[i], OFS)

   for (i = 4; i < NF; ++i)
      printf("%s_%s%s", $variable, header[i], OFS)
   printf("%s_%s%s", $variable, header[NF], ORS)
}

{ p=$variable; print }
EOF

############################
# end awk script           #
############################

awk -vvariable="$awktoken" "$awkscript" ${tmp} > ${output}

variable이 예의 변수 이름입니다. 일반적으로 당신은 그것을 호출하지 않고 $값을 유지하여 $3원하는 숫자 로 확장할 수 있습니다.

관련 정보