2013-01-04 84 views
0

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

是否尝试过的awk -v的变化有错误,说明“AWK:无效-v选项”,即使选项中列出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 
+0

尝试删除空间在'#!/bin/bash' –

+0

检查此:http://theunixshell.blogspot.com/2013/01/passing-bash-variable-to-awk.html – Vijay

+0

可能的重复[使用awk与变量](http:// stackoverflow .com/questions/6373379/using-awk-with-variables) –

回答

7

AWK的一些版本需要-v和变量赋值之间的空间。另外,您应该将bash变量放在双引号中,以防止shell在传递给awk之前进行不需要的分析(例如分词,通配符扩展)。最后,awk /.../是一个常数正则表达式(即/class/将搜索字符串“class”,而不是变量“class”的值)。有了这一切修正,这里的awk命令,我想会做你想要什么:

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

现在,有你使用它来代替任何理由:

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

谢谢Gordon,它很有效。我对用awk和bash进行编程非常新,对我来说学习曲线有点陡峭,但这有助于我的知识向前发展。 grep命令我有一些经验,但是,我仍然不够了解新手的方法,至少我想了解awk。感谢所有人回复。 – user1947569

0

你的剧本是我也不清楚,但是这些所有的工作:

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