如何使用grep表示复杂的表达式?

时间:2016-11-03 13:55:37

标签: linux bash grep

+----+-------+-----+ 
| ID | STORE | QTY |
+----+-------+-----+
|    |       |     |
| 9  | 101   | 18  |
|    |       |     |
| 8  | 154   | 19  |
|    |       |     |
| 7  | 111   | 13  |
|    |       |     |
| 9  | 154   | 18  |
|    |       |     |
| 8  | 101   | 19  |
|    |       |     |
| 7  | 101   | 13  |
|    |       |     |
| 9  | 111   | 18  |
|    |       |     |
| 8  | 111   | 19  |
|    |       |     |
| 7  | 154   | 14  |
+----+-------+-----+

假设我有3个商店,并且我想为每个商店的每个商店提供STORE。

例如id 9在3个商店,每个商店有18个数量, 但是id 7在商店中,但只有两个商店有相同的数量(在商店111和101 - 在154 - id有14个数量);如何使用grep获得该结果?

你认为不可能将这一个用于一个表达式吗?我想到了正则表达式,但我不知道以哪种方式获得数量并与另一行进行比较。在我的文件中,它看起来像:

1 个答案:

答案 0 :(得分:0)

cut提取第一列和最后一列,计算uniq组合的数量,并仅输出计数为3的那些(即所有三个商店的值相同):

$ cut -d\| -f2,4 | sort | uniq -c | grep '^ *3 '
      3  8  | 19  
      3  9  | 18