【问题标题】:Column increment condition列增量条件
【发布时间】:2019-04-12 11:44:46
【问题描述】:

检查第 2 列中的值,如果值不是增量 50 则打印行

Input file

1000 2450 1
1000 2500 1
1000 2501 1
1000 2550 1
1000 2601 1
1000 2650 1

需要的输出

error 1000 2501 1
error 1000 2601 1

使用我试过的 Karakfa 的答案

awk '{$2%50 
{ err = FNR; exit } 
END { print "Invalid file on line", err; exit 1} 
print "Wrong File :", FILENAME }' file

提前致谢

【问题讨论】:

  • 您的意思是“50 的倍数”吗? 2550 也不是 50 超过 2501 的增量。
  • 还是只考虑前面的行?
  • 本杰明,是 50 的倍数

标签: awk


【解决方案1】:
$ awk '$2%50{print "error",$0}' file

error 1000 2501 1
error 1000 2601 1

如果该值不是 50 的倍数,则余数 mod 50 将为非零。

我猜这就是你正在尝试的?

$ awk '$2%50 {err=FNR; exit} 
       END   {if(err) 
                {print "Invalid file on line:", err; 
                 print "Wrong File :", FILENAME; 
                 exit 1}}' file

注意END不能出现在任何语句中,只能作为“条件”出现,类似于BEGIN

【讨论】:

  • 嗨 karakfa,我尝试像这样调整解决方案,但出了点问题..awk '{substr($0,5,4)%50 { err = FNR; exit } END { print "无效文件在线", err; exit 1} print "Wrong File :", FILENAME }' file 请您指教
  • 嗨Karakfa,Tks,但我想得到发现错误的第一行..这可能吗
  • 错误是什么?怎么了?很难从 cmets 中读取。
  • Karakfa,这正是我要找的东西.. tks
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多