bashスクリプトでawkを呼び出し、bash変数の値を渡そうとします。これらの変数の数を取得し、awkから渡されたすべての変数を印刷する方法はありますか?
awkに渡される変数の数は動的です。
以下の例
#!/bin/bash
NAME="Dell"
SERIAL="12345"
echo "Hello" | awk -v a=$NAME -v b=$SERIAL '{ print a,b }'
参照、作業例、Irvurの答えはここにあります。
#!/bin/bash
function confirm_peers (){
header_def=("${header_def[@]:-None}")
read -r -p "Enter nodes from header[${header_def[*]}]: " -a header
header=("${header[@]:-${header_def[@]}}") ;
echo -e "\nInput Recorded - ${header[@]} \n"
}
createEncConfig()
{
/usr/bin/awk -f - <<-'EOE' ${header[*]} FS=":" $1
BEGIN {
count=1
for (i = 1; i < ARGC - 2; ++i) {
split(ARGV[i], ar, "=");
print ar[2]
}
print "\nCount=" ARGC -3
}
EOE
}
confirm_peers
# Making array content adaptable to awk input
for x in ${!header[@]} ; do header[x]="a=${header[x]}"; done
createEncConfig $1
参照 - これまでの最も簡単なKusalalanandaの答え
#!/bin/bash
function confirm_peers (){
header_def=("${header_def[@]:-None}")
read -r -p "Enter nodes from header[${header_def[*]}]: " -a header
header=("${header[@]:-${header_def[@]}}") ;
echo -e "\nInput Recorded - ${header[@]} \n"
}
createEncConfig()
{
/usr/bin/awk -v args="${header[*]}" -f - <<-'EOE' FS=":" $1
BEGIN {
count=split(args,ar," ")
for ( x in ar ) {
print ar[x]
}
print "\n" count
}
EOE
}
confirm_peers
createEncConfig $1
出力:ダミーファイルを渡します。
$bash /tmp/a.bsh /tmp/enc1.txt
Enter nodes from header[None]: a b c d
Input Recorded - a b c d
a
b
c
d
Count=4
みんなありがとうございます..
ベストアンサー1
私が考えることができる1つのオプションは、これらの変数が表示されるように場所を変更することですARGV
。これにより、ブロック内でARGC
変数を使用できなくなります。BEGIN
また、引数として渡したファイル名については、そのファイルawk
数を減算して説明する必要があります。ARGC
echo "Hello" | awk '{ print a, b, ARGC - 1}' a=$NAME b=$SERIAL
DELL 12345 2