awkに渡された変数の数を取得する方法

awkに渡された変数の数を取得する方法

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

おすすめ記事