2017-08-02 232 views
-3

我有这样的txt文件:如何在shell脚本获得AWK命令动态NR参数

1 a 
2 b 
3 c 

我想利用这些DATAS一步例如步首先,我将获得“1”,并把它一个varible然后得到“A”把它放在一个varible和运行curl命令

我的意思是先第一行第一列然后最前一页行第二列然后第二行第一列.....

我写的一个脚本在下面但不工作,它变成零变量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 
+1

这似乎是[XY问题](http://xyproblem.info/),因为您描述的方法似乎没有意义。告诉我们你想做什么(而不是你想怎么做),我们可以帮助你。 –

+0

顺便说一句,该工作的正确工具(重新:生成正确引用和转义的JSON)是['jq'](https://stedolan.github.io/jq/)。 –

回答

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,但这是另一个问题的问题。

+0

谢谢我的问题已经得到您的帮助 – getaffe

0

你需要传递变量与-v等来的awk:

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

在这里我们使用awk的变量varb等于你的bash循环的变量i。

+0

谢谢我的问题已经通过您的帮助解决了 – getaffe