2013-02-14 140 views
2

我必须找到所有具有特定数据的记录,这些记录我将作为命令行参数传递。如何在AWK中插入shell脚本的命令行参数?

AWK表达是这样的(是日期以这种格式:'02/08/2013' )

猫records.txt | awk -F',''$ 4〜/ 02/08/2013/{print $ 1 $ 2}'

第4栏是日期栏。

我想要做的是提供日期作为第一个参数并进行比较。

我试过这个,但它不工作。

cat records.txt | awk的-F '' -v awkvar = “$ 1” '$ 4〜/ ^“awkvar/{打印$ 1 $ 2}'

这里的日期栏与开始”的报价,所以我告诉去寻找谁与开始记录“+ awkvar给定日期

谁能帮我这个

编辑:?

的awk -F '' -v VAR1 = “$ 1”“$ 4〜/^“2013/{print $ 1 $ 2}'{这个人正在工作,因为我直接比较了2013年的记录}

当我做这个

的awk -F '' -v VAR1 = “$ 1” '$ 4〜/ ^“VAR1/{打印$ 1 $ 2}',它不返回任何东西,什么是区别。

回答

4

传递变量来awk,使用

awk -v awkvar=$value '{print awkvar}' 

这就是说,没必要管cat | awk(无用的使用猫),所以最后:

awk -F, -v awkvar="$1" '$4 ~ "^\""awkvar {print $1 $2}' records.txt 
+0

是的,这是我做过什么,我也更新了这篇文章,你认为它应该起作用吗?我从昨天开始一直在试这个吗? – Dude 2013-02-14 10:18:47

+0

重试后编辑 – 2013-02-14 10:25:47

+0

当我这样做的时候cat data.csv | awk -F','-v var1 =“$ 1”'$ 4〜/ ^“2013/{print $ 1 $ 2}',当我使用第一个参数cat进行匹配时,我得到了输出BUTUTFs | awk -F ','-v var1 =“$ 1”'$ 4〜/ ^“var1/{print $ 1 $ 2}',它没有给我任何东西 – Dude 2013-02-14 10:27:59