将bash输入变量传递给awk

将bash输入变量传递给awk,bash,awk,Bash,Awk,尝试从用户输入将变量传递到awk: 已经尝试过awk-v的变体,错误声明为“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/ {p

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

已经尝试过awk-v的变体,错误声明为“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

我不清楚你的脚本,但这些都可以:

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

我不清楚你的脚本,但这些都可以:

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

某些版本的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

某些版本的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

尝试删除
#中的空格/bin/bash
检查此项:可能重复尝试删除
中的空格/bin/bash
检查这个:可能是重复的感谢戈登,它成功了。我对使用awk和bash编程非常陌生,学习曲线对我来说有点陡峭,但这有助于提高我的知识水平。grep命令我有一些经验,但是,我还是一个新手,不知道最好的方法,至少,我想了解awk。谢谢大家的回复。谢谢戈登,它成功了。我对使用awk和bash编程非常陌生,学习曲线对我来说有点陡峭,但这有助于提高我的知识水平。grep命令我有一些经验,但是,我还是一个新手,不知道最好的方法,至少,我想了解awk。谢谢大家的回复。