适合这个awk声明

时间:2014-06-27 14:55:13

标签: regex bash awk

我正在处理一个bash脚本调用另一个awk脚本。这是代码行:

awk -f /home/rkahil/BMS/parse.awk $filename.tmp > $filename | /..,[A-Z][A-Z]/ $filename

我在语法上知道这是故事,但是我需要这个以下正则表达式/..,[A-Z][A-Z]/ $filename在语法上是错误的但我需要在这个语句中使用它并且我不太确定如何。有没有人有任何建议?

3 个答案:

答案 0 :(得分:1)

我假设您需要将最后一个正则表达式添加到awk脚本而不修改awk脚本。您需要编辑问题并明确说明您的要求。见https://stackoverflow.com/help/asking

这可能是一个GNU awk功能,但您可以提供多个-f选项,将所有已命名的awk脚本连接成一个。因此:

awk -f /home/rkahil/BMS/parse.awk \
    -f <(echo 'FILENAME ~ /..,[A-Z][A-Z]/') \
    $filename.tmp > $filename

演示:

$ cat foo.awk
/foo/ {print}
$ cat bar.awk 
/bar/ {print}
$ awk -f foo.awk -f bar.awk -f <(echo '/baz/ {print}') <<END
blah
foo
hello
world 
var bar car
1234
ab cbazdef
bye
END
foo
var bar car
ab cbazdef

答案 1 :(得分:0)

您可以在awk脚本中包含此条件:

awk 'FILENAME ~ /..,[A-Z][A-Z]/{...}' "$filename"

答案 2 :(得分:0)

也许你的意思是:

awk -f /home/rkahil/BMS/parse.awk "$filename.tmp" | grep '..,[A-Z][A-Z]' > "$filename"

?它并不完全清楚你的意思,但上面将不加修改地执行awk脚本,然后过滤给定正则表达式的输出,最后将结果写入原始文件。