【发布时间】:2015-08-16 12:01:59
【问题描述】:
我写了一个shell函数如下
extract () {
awk -vbegin="${1}" '/begin/ {flag=1;next} /=====/{flag=0} flag {
print
}
' "$2" | egrep "$3" | egrep -v "$4"
}
但是,当我打电话时
extract "Begin Criteria" "First" "Second" "Third1|Third2"
第一个变量“Begin Criteria”似乎无法在 /begin/ 处解析
我怎样才能让我的电话类似于?
awk '/Begin Criteria/ {flag=1;next} /=====/{flag=0} flag {
print
}
' First | egrep 'Second' | egrep -v 'Third1|Third2'
原始数据文件
First Bundle ====
First 1
Second 1
Third_1 1
Third_2 1
=====
Second Bundle ====
Second 1
Third_1 1
Third_2 1
Third_3 1
=====
Third Bundle ====
Third_1 1
Third_2 1
Third_3 1
=====
First Bundle ====
First 2
Second 2
Third_1 2
Third_2 2
=====
Second Bundle ====
Second 2
Third_1 2
Third_2 2
Third_3 2
=====
Third Bundle ====
Third_1 2
Third_2 2
Third_3 2
=====
用法
extract "Second Bundle" Raw_data_file "Second" "Third1|Third2" Second.out
extract "Third Bundle" Raw_data_file "Third1|Third2" "" Third.out
extract "First Bundle" Raw_data_file "" "" First.out
预期
先出
First 1
Second 1
Third_1 1
Third_2 1
First 2
Second 2
Third_1 2
Third_2 2
第二次出局
Second 1
Second 2
第三次出局
Third_1 1
Third_2 1
Third_1 2
Third_2 2
【问题讨论】:
-
您使用的是
awk,然后是两个egreps。可能awk一个人就够了。此外,发布一些示例输入和所需的输出以使其更清晰。最后,flag { print }不是必须的;单独使用flag会得到相同的结果。 -
输入输出帖子。感谢您的帮助