根据第二列值选择特定行

时间:2016-05-23 12:57:47

标签: awk

以下是我的test.log文件

a   1020    491 513 1   0   0   52
a   1000    491 513 1   0   0   53
sa  4011    491 513 1   0   0   0
sa  4010    491 513 1   0   0   1
d   1000    508 0   0   0   0   53
d   1020    508 0   0   0   0   52
a   1000    508 513 1   0   0   54
a   1020    508 513 1   0   0   55
sa  4011    508 1026    2   0   0   2
sa  4010    508 1026    2   0   0   3
sd  4010    508 513 1   0   0   1   QIO1
sa  4021    508 513 1   0   0   1
d   1000    525 0   0   0   0   54
d   1020    525 0   0   0   0   55
sd  4021    525 0   0   0   0   1   QIO2
a   1000    525 513 1   0   0   57
a   1020    525 513 1   0   0   56
sa  4010    525 1026    2   0   0   5
sa  4011    525 1539    3   0   0   4
sd  4011    525 1026    2   0   0   0   QIO1
sa  4021    525 513 1   0   0   0
d   1000    542 0   0   0   0   57
sd  4021    542 0   0   0   0   0   QIO2
d   1020    542 0   0   0   0   56

我想只提取有(第一列= sa或sd)和第二列等于4010和4011的行。我尝试了以下命令。

cat test.log | grep "sa\|sd" | awk '{if ($2 = "4010"|| $2 ="4011")print}'

但它给了我错误的输出。

我的预期输出是

sa  4011    491 513 1   0   0   0
sa  4010    491 513 1   0   0   1
sa  4011    508 1026    2   0   0   2
sa  4010    508 1026    2   0   0   3
sd  4010    508 513 1   0   0   1   QIO1
sa  4010    525 1026    2   0   0   5
sa  4011    525 1539    3   0   0   4
sd  4011    525 1026    2   0   0   0   QIO1

有人可以建议我哪里出错了。感谢

2 个答案:

答案 0 :(得分:3)

是惯用的,我的朋友:

awk '$1 ~ /^s(a|d)$/ && $2 ~ /^401[01]$/' file
#         ^^^^^^^^^           ^^^^^^^^^
#         sa or sd            4010 or 4011

它返回:

sa  4011    491 513 1   0   0   0
sa  4010    491 513 1   0   0   1
sa  4011    508 1026    2   0   0   2
sa  4010    508 1026    2   0   0   3
sd  4010    508 513 1   0   0   1   QIO1
sa  4010    525 1026    2   0   0   5
sa  4011    525 1539    3   0   0   4
sd  4011    525 1026    2   0   0   0   QIO1

答案 1 :(得分:0)

你可以完全用grep:

完成
$ grep -E '^s[ad]\s+401[01]' file
sa  4011    491 513 1   0   0   0
sa  4010    491 513 1   0   0   1
sa  4011    508 1026    2   0   0   2
sa  4010    508 1026    2   0   0   3
sd  4010    508 513 1   0   0   1   QIO1
sa  4010    525 1026    2   0   0   5
sa  4011    525 1539    3   0   0   4
sd  4011    525 1026    2   0   0   0   QIO1