如何使用标准的linux/unix过滤器验证信息?

shu*_*ter 1 bash

我在制表符分隔文件中有以下数据:

_ DATA _

Col1    Col2     Col3     Col4    Col5
blah1   blah2     blah3   4       someotherText
blahA   blahZ     blahJ   2       someotherText1
blahB   blahT     blahT   7       someotherText2
blahC   blahQ     blahL   10      someotherText3
Run Code Online (Sandbox Code Playgroud)

我想确保此文件第4列中的数据始终为整数.我知道如何在perl中执行此操作

  • 读取每一行,在变量中存储第4列的值
  • 检查该变量是否为整数
  • 如果以上是真的,继续循环
  • 否则会断开循环,并显示文件数据不正确的消息

但是我如何在使用标准linux/unix过滤器的shell脚本中执行此操作?我的猜测是使用grep,但我不确定如何?

pix*_*eat 7

cut -f4 data | LANG=C grep -q '[^0-9]' && echo invalid
Run Code Online (Sandbox Code Playgroud)
  • LANG = C表示速度
  • -q在可能的长文件中退出第一个错误

如果您需要剥离第一行然后使用tail -n + 2,或者您可以使用hacky并使用:

cut -f4 data | LANG=C sed -n '1b;/[^0-9]/{s/.*/invalid/p;q}'
Run Code Online (Sandbox Code Playgroud)