【问题标题】:How use grep for that complicated expressions?如何使用 grep 处理复杂的表达式?
【发布时间】:2016-11-03 13:55:36
【问题描述】:
+----+-------+-----+ 
| 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 家商店,我想为每个 id 取 STORE,每个商店的数量都相同。

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

你认为这是不可能的一对一表达吗?我考虑过正则表达式,但我不知道我以哪种方式获得数量并与另一行进行比较。在我的文件中,它看起来像:

【问题讨论】:

  • 您似乎从 SQL 数据库中获得了输出。使用 SQL 查询所述数据库,而不是在输出上使用 coreutils。
  • |s 是您文本的一部分,还是只是为了提出问题而进行的精美装饰?
  • @Sundeep 只是花哨的装饰以更好地阅读输出
  • 为了清晰起见,最好添加没有装饰元素的实际输入和预期的输出......另外,看看awk 'id[$1]=$0{if($3 != qty[$1]) delete id[$1]} {qty[$1]=$3} END{for (i in id) {print id[i]}}' file是否有效

标签: linux bash grep


【解决方案1】:

通过cut提取第一列和最后一列,统计uniq组合的个数,只输出count为3的(即三个store的值都一样):

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

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多