将bash输入变量传递给awk

时间:2013-01-04 05:36:06

标签: bash awk

尝试将变量从用户输入传递到awk:

已经尝试过awk -v的变体,但有错误声明&aw; awk:invalid -v option',即使该选项列在man文件中也是如此。

#! /bin/bash
read -p "Enter ClassID:" CLASS
read -p "Enter FacultyName:" FACULTY


awk '/FacultyName/ {print}' data-new.csv > $FACULTY.csv
awk -vclass=${CLASS} '/class/ {print}' data-new.csv >> $FACULTY.csv 


echo Class is $CLASS
echo Faculty member is $FACULTY

2 个答案:

答案 0 :(得分:7)

某些版本的awk需要-v和变量赋值之间的空格。此外,您应该将bash变量放在双引号中,以防止在传递给awk之前shell进行不必要的解析(例如,单词拆分,通配符扩展)。最后,在awk /.../中是一个常量正则表达式(即/class/将搜索字符串“class”,而不是变量“class”的值。所有这些都得到纠正,这是我认为会做你想做的awk命令:

awk -v class="${CLASS}" '$0 ~ class {print}' data-new.csv >> $FACULTY.csv

现在,你有没有理由使用它而不是:

grep "$CLASS" data-new.csv >> $FACULTY.csv

答案 1 :(得分:0)

我的脚本不清楚,但这些都有效:

CLASS=ec123
echo | awk -vclass=$CLASS '{print class}'
echo | awk -vclass=${CLASS} '{print class}'