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
必要な数に拡張できます。