Linux shell脚本:将变量从stdin传递给awk

时间:2017-10-28 09:51:40

标签: linux bash shell awk

我有一个以逗号分隔的.txt文件,结构如下:

ABC,NAME1,LASTNAME1
DEF,NAME2,LASTNAME2
GHI,NAME3,LASTNAME3

运行时:

$ ./script.sh file.txt

#!/bin/bash
awk -F, '/NAME1/{print $3}' "$1"

我得到了我想要的输出:

LASTNAME1

尝试通过将变量传递给NAME1来替换awk

$ ./script.sh file.txt NAME1

#!/bin/bash
awk -v n="$2" -F, '/$n/{print $3'} "$1"

我根本没有得到任何输出。我查了一下,在bash中输入的$2确实是NAME1。我错过了什么?

1 个答案:

答案 0 :(得分:1)

Awk中的变量名称​​不前缀为$, 所以它应该只是n而不是$n。 此外,您不能在/.../表达式中使用变量。 你可以这样写:

awk -v n="$2" -F, '$0 ~ n {print $3}' "$1"

顺便说一下,如果n参数与第二列中的值完全匹配, 那么在== $2上使用awk -v n="$2" -F, '$2 == n {print $3}' "$1" 的完全匹配条件会更好:

import csv
def rawInputTest():
    x = raw_input(">>> Input: ")
    print x
    return x

def writeToFile(xx):
    with open('WorkOrderLog.csv', 'a') as f:
         w=csv.writer(f)
         a=0
         b=0
         if xx>500:
             b=xx
         elif xx<500:
             a=xx
         g=[a,b]
         w.writerow(g)
while (True):
    rawInputTest()
    writeToFile(rawInputTest())