1

尝试从用户输入将变量传递给 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
4

2 回答 2

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
于 2013-01-04T06:46:41.813 回答
1

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

CLASS=ec123
echo | awk -vclass=$CLASS '{print class}'
echo | awk -vclass=${CLASS} '{print class}'
于 2013-01-04T05:47:33.203 回答