如何将此bash命令行折叠为awk语句?

时间:2009-10-02 15:15:20

标签: bash awk grep

我已经创建了一个awk脚本并像这样使用它:

# grep -E "[PM][IP][DO][:S]" file.txt | awk-script

如何修改awk脚本以包含grep命令(搜索“PID:”或“MPOS”?)的工作量?

awk-script是:

#!/usr/bin/awk -f
/Sleeve/  {
        printf("%8d, %7d, %7.2f, %7.2f, %7.2f\n", $5, $6, $7, $30, $31)
}
/Ambient/ {
        printf("%8d, %7d,,,, %7.2f, %7.2f\n", $5, $6, $7, $8)
}
/MPOS:/ {
        printf("%8d, %7d,,,,,, %5d, %5d\n", $4, $5, $2, $3)
}

2 个答案:

答案 0 :(得分:2)

如果您只想搜索PID:MPOS,可以说如果您在该行中找到它们,则需要跳过以下规则:

#!/usr/bin/awk -f

!/PID:|MPOS/ { 
        next 
}

/Sleeve/  {
        printf("%8d, %7d, %7.2f, %7.2f, %7.2f\n", $5, $6, $7, $30, $31)
}
/Ambient/ {
        printf("%8d, %7d,,,, %7.2f, %7.2f\n", $5, $6, $7, $8)
}
/MPOS:/ {
        printf("%8d, %7d,,,,,, %5d, %5d\n", $4, $5, $2, $3)
}

答案 1 :(得分:2)

我在busybox(在Bash的Ubuntu上)尝试了 litb的回答,这对我有用。为了测试,我使用以下shebang匹配我有busybox的符号链接:

#!/home/username/busybox/awk -f

使用以下方式运行测试:

./awk-script file.txt

我也在busybox sh下进行了测试(PATH=/home/username/busybox:$PATH虽然没有必要)但它在那里工作。

当你说“我还有悲伤”时。那是什么意思?您收到错误消息或结果不正确吗?

顺便说一句,除非你在搜索角色的所有排列,否则你可以像这样做你的grep:

grep -E "(PID:|MPOS)" file.txt