首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据某些条件使用shell脚本从文本文件中删除几行数据

如何根据某些条件使用shell脚本从文本文件中删除几行数据
EN

Stack Overflow用户
提问于 2021-04-24 16:45:21
回答 1查看 76关注 0票数 0

我有一个超过100 k行的文本文件。下面提到的数据是我所拥有的文本文件的示例。我想对这些数据使用一些条件,并删除一些行。文本文件没有标题(ID,NAME,Code-1,code,2-code-3).我提到过供参考。如何使用shell脚本来实现这一点?

输入测试文件:

代码语言:javascript
复制
| ID | NAME | Code-1 | code-2 | code-3 | 
| $$ | 5HF | 1E | N | Y | 
| $$ | 2MU | 3C | N | Y | 
| $$ | 32E | 3C | N | N | 
| AB | 3CH | 3C | N | N | 
| MK | A1M | AS | P | N | 
| $$ | Y01 | 01 | F | Y | 
| $$ | BG0 | 0G | F | N |

条件:

如果代码-2 ='N‘和代码-1不等于( '3C’,'3B‘,'32’,'31‘,'3D’),则ID=‘$’‘

  • ’如果代码-2= 'N‘,代码-1等于( '3C’,'3B‘,'32’,'31‘,'3D')然后接受任何ID和(接受ID='$$‘只有当code-3='Y')'

  • if代码-2 != 'N’然后接受(ID=‘$’只有当代码-3=‘Y’)和所有其他ID

输出:

代码语言:javascript
复制
| ID | NAME | Code-1 | code-2 | code-3 | 
| $$ | 5HF | 1E | N | Y | 
| $$ | 2MU | 3C | N | Y | 
| AB | 3CH | 3C | N | N | 
| MK | A1M | AS | P | N | 
| $$ | Y01 | 01 | F | Y |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-25 06:42:01

当你问问题的时候,它会鼓励你展示自己的努力。但我明白,如果你是巴什的新手,这个问题可能会很复杂。这是我使用awk的解决方案。花了0.545s在我的电脑上处理137 K行(带有中等规格)。

代码语言:javascript
复制
awk '{
ID=$2; NAME=$4; CODE1=$6; CODE2=$8; CODE3=$10;
if (CODE2 == "N") {
  if (CODE1 ~ /(3C|3B|32|31|3D)/) {
    if (ID == "$$") {
      if (CODE3 == "Y") {
        print;
      }
    }
    else {
      print;
    }
  }
  else {
    if (ID == "$$") {
      print;
    }
  }
}
else {
  if (ID == "$$") {
    if (CODE3 == "Y") {
      print;
    }
  }
  else {
    print;
  }
}}' file

注意,它有某些限制:

( a)它用空格(而不是| )分隔值。它将适用于您的确切输入格式,但不会处理没有额外空格的输入行。

代码语言:javascript
复制
|$$|32E|3C|N|N|
|AB|3CH|3C|N|N| 

( b)由于同样的原因,如果col有额外的空格,则命令将生成不正确的结果。

代码语言:javascript
复制
| $$ | 32E FOO | 3C | N | N |
| AB | 3CH BBT | 3C | N | N |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67245194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档