如何在shell脚本中获取AWK命令中的动态NR参数

时间:2017-08-02 14:35:30

标签: bash shell curl awk sh

我有这样的txt文件:

1 a
2 b
3 c

我想逐步采取这些数据,例如首先ı将获得“1”并将其变为可变,然后将“a”放入变量并运行卷曲命令

我的意思是第一排第一列然后是第二排第二列然后是第二排第一列......

ı在下面写了一个脚本但没有工作,它为b和c

变成了零变量
#!/bin/sh
for ((i=1;i<=4;i++)); do
                echo $i
        b=$(awk 'NR==$i { print $1}' a.txt)
        c=$(awk 'NR==$i { print $2}' a.txt)
        echo $b
        echo $c
curl -X POST \
-H "X-netmera-api-key: xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '[
    {
        "deviceToken" : "$b",
        "platform" : "1",
        "extId" : "$c"
    }
]' \
https://xxxx.xxxxx.com/rest/3.0/xxxxx

done

2 个答案:

答案 0 :(得分:2)

扔掉awk;这里没有必要。

while read -r b c; do
  curl -X POST \
   -H "X-netmera-api-key: xxxxxxxxxx" \
   -H "Content-Type: application/json" \
   -d "[
        {
          \"deviceToken\" : \"$b\",
          \"platform\" : \"1\",
          \"extId\" : \"$c\"
        }
       ]" \
   https://xxxx.xxxxx.com/rest/3.0/xxxxx
done < a.txt

你不应该像这样动态生成JSON,但这是另一个问题的问题。

答案 1 :(得分:1)

您需要使用-v将变量传递给awk,所以:

b=$(awk -v varb=$i 'NR==varb { print $1}' a.txt)

这里我们将awk变量varb设置为等于bash循环的i变量。