【问题标题】:How to get consolidated count of delimiter occurrence如何获得分隔符出现的合并计数
【发布时间】:2021-07-25 19:08:11
【问题描述】:

我需要获取 '|' 的出现次数在文件的每一行中,然后将计数与给定的 inputcount 匹配,当计数错误时需要抛出异常。

inputcount=3和文件是否有以下内容

s01|test|aaa|hh
S02|test|bbb
so3|test|ccc|oo

然后在执行第 2 行时应该抛出异常,并且应该退出文件。

尝试在 Awk 命令下获取每行的计数,但我不确定如何比较和抛出异常,当它不匹配时

awk ' {print (split($0,a,"\|")-1) }' test.dat

谁能帮帮我?

【问题讨论】:

    标签: python linux shell awk


    【解决方案1】:

    不妨试试

    awk -F '[|]' -v cols="$inputcount" 'NF != cols+1 {
        print FILENAME ":" FNR ":" $0 >"/dev/stderr"; exit 1 }' test.dat
    

    -F 参数表示在此分隔符上拆分;结果字段 NF 的数量将比分隔符多 1,因此当该数字错误时,我们会尖叫并死去。

    【讨论】:

      【解决方案2】:
      $ inputcount=3
      $ awk -v c="$inputcount" 'gsub(/\|/,"&")  !=  c{exit 1}' file
      $ echo $?
      1
      

      【讨论】:

        【解决方案3】:

        你可以使用这个 awk:

        awk -v inputcount=3 -F '\\|' 'NF && NF != inputcount+1 {exit 1}' file &&
         echo "good" || echo "bad"
        

        详情:

        • -F '\\|'| 设置为输入字段分隔符
        • 如果任何行没有inputcount 管道分隔符,NF != inputcount+1 将返回 true。

        【讨论】:

        • 感谢您的回复。由于我的文件包含的某些行是空的,所以它总是返回错误。你能帮帮我吗
        • 确定检查更新的答案。它现在会忽略空行
        【解决方案4】:

        由于您还用python 标记了帖子,我将编写一个可以是简单脚本的python 答案。

        核心是:

        with open(filename) as f:
            for n, line in enumerate(f):
                if line.count("|") != 3:
                    print(f"Not valid file at line {n + 1}")
        

        你可以添加一些样板:

        import fileinput
        import sys
        
        with fileinput.input() as f:
            for n, line in enumerate(f):
                if line.count("|") != 3:
                    print(f"Not valid file at line {n + 1}")
                    sys.exit(1)
        

        使用fileinput,您几乎可以接受任何类型的输入:请参阅Piping to a python script from cmd shell

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-19
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 2021-06-18
          • 2015-02-07
          相关资源
          最近更新 更多