尝试将变量从用户输入传递到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
答案 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}'