【问题标题】:How to delete from match pattern in a specific column until end of file如何从特定列中的匹配模式中删除直到文件结尾
【发布时间】:2019-11-09 01:11:30
【问题描述】:

一旦找到模式,我想删除文件中的记录,并从该模式中删除所有行,直到文件结束

我尝试在 awk 中做,但我还没有发现是否有更简单的方法来做到这一点

所以我想匹配第二列中的模式,然后从该模式中删除记录,直到文件结束

awk -F"," '$2 ~ /100000/ {next} {print}'  file.csv 

因此,上面的代码跳过了这些行,但是正如您所见,我需要添加多个匹配模式以忽略第二列中值为 100000 的行之后的行。请注意,第 2 列中的值是按顺序出现的,因此在 100000 之后会出现 100001,并且没有固定的结束编号。

【问题讨论】:

  • 能否请您在您的问题中发布输入和预期输出示例,然后让我们知道?
  • values in 2nd column appear sequentially 只是好奇.. 你的第二列是1,2,3,... 吗?如果是这样,您可以使用head -n99999 file.csv

标签: awk sed


【解决方案1】:

不确定我是否正确地解决了您的问题恕我直言,我相信您需要关注。

awk '$2==100000{print;exit} 1' Input_file

这将打印到第 2 列为 100000 的行,然后由于您不想打印任何内容,尽管只是读取更多文件并跳过它,这将从代码中退出,这也将节省我们的时间。

或者按照 Ed Morton 先生的好建议:

awk '1; $2==100000{exit}' Input_file

【讨论】:

  • @user3423407,很高兴它对您有所帮助,您也可以选择此答案作为正确答案,干杯。
  • 1 = {print}。重复的代码(例如 print 语句)通常很糟糕,您不需要从 2 个位置打印 $2==100000{print;exit} {print},只需将打印放在正确的位置:{print} $2==100000{exit} 或者如果您更喜欢继续使用 1应该是1; $2==100000{exit}
  • @EdMorton,谢谢您,先生,现在添加了该解决方案,先生,干杯。
猜你喜欢
  • 2017-01-03
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多