Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据某些条件使用shell脚本从文本文件中删除几行数据_Shell_Unix_Scripting_Sh - Fatal编程技术网

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

如何根据某些条件使用shell脚本从文本文件中删除几行数据,shell,unix,scripting,sh,Shell,Unix,Scripting,Sh,我有一个超过10万行的文本文件。下面提到的数据是我拥有的文本文件的一个示例。我想在此数据上使用一些条件并删除一些行。文本文件没有标题(ID、名称、代码1、代码2、代码3)。我提过供参考。如何使用shell脚本实现这一点 输入测试文件: | ID | NAME | Code-1 | code-2 | code-3 | | $$ | 5HF | 1E | N | Y | | $$ | 2MU | 3C | N | Y | | $$ | 32E | 3C | N | N | | AB | 3C

我有一个超过10万行的文本文件。下面提到的数据是我拥有的文本文件的一个示例。我想在此数据上使用一些条件并删除一些行。文本文件没有标题(ID、名称、代码1、代码2、代码3)。我提过供参考。如何使用shell脚本实现这一点

输入测试文件:

| 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和(仅当代码-3='Y'时接受ID='$$')
  • 如果代码-2!='N'然后接受(ID='$$'仅当code-3='Y')和所有其他ID
  • 输出:

    | 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 |
    
    

    鼓励你在提问时展示自己的努力。但我明白,如果你是Bash新手,这个问题可能会很复杂。下面是我使用awk的解决方案。花了0.545秒在我的电脑上处理了137k行(规格适中)

    注意,它有一些限制:

    a) 它用空格而不是
    |
    来分隔值。它将适用于您的精确输入格式,但不适用于没有额外空格的输入行,例如

    |$$|32E|3C|N|N|
    |AB|3CH|3C|N|N| 
    
    | $$ | 32E FOO | 3C | N | N |
    | AB | 3CH BBT | 3C | N | N |
    
    b) 出于同样的原因,如果col值有额外的空格,例如

    |$$|32E|3C|N|N|
    |AB|3CH|3C|N|N| 
    
    | $$ | 32E FOO | 3C | N | N |
    | AB | 3CH BBT | 3C | N | N |
    

    欢迎使用SO,请在您的问题中以代码的形式添加您的努力,这是非常受鼓励的,谢谢。@sunanda p-如果文本文件没有标题,请不要通过将其插入预格式化块来误导读者。接受任何ID和(仅当code-3='Y'时接受ID='$$')是矛盾的。我的意思是接受所有其他ID和(仅当code-3='Y'时接受ID='$$')检查条件后,此代码是否会删除不需要的行?我只想知道为什么我们使用print代码打印需要的行,而不是删除不需要的行。