Bash 输出仅包含一列的行的csv

Bash 输出仅包含一列的行的csv,bash,awk,Bash,Awk,使用输入csv文件 sid,storeNo,latitude,longitude 2,1,-28.03720000,153.42921670 9 sid、storeNo、纬度、经度 2,1,-28.03720000,153.42921670 9 我希望只输出有一列的行,在本例中是第3行。 如何在bashshell脚本中实现这一点?使用awk 以下awk将是usfull $ awk -F, 'NF==1' inputFile 9 它的作用是什么? -F,将字段分隔符设置为, NF==1匹配具有

使用输入csv文件

sid,storeNo,latitude,longitude 2,1,-28.03720000,153.42921670 9 sid、storeNo、纬度、经度 2,1,-28.03720000,153.42921670 9 我希望只输出有一列的行,在本例中是第3行。
如何在bashshell脚本中实现这一点?

使用awk

以下awk将是usfull

$ awk -F, 'NF==1' inputFile
9
它的作用是什么?

  • -F,
    将字段分隔符设置为

  • NF==1
    匹配具有
    NF
    的行,字段数为1。不提供任何操作,因此会执行默认操作,即打印整个记录。它类似于
    NF==1{print$0}

  • inputFile
    将csv文件输入到awk脚本

使用grep

同样的功能也可以使用
grep

$ grep -v ',' inputFile
9
  • -v
    选项打印与图案不匹配的线条

  • 以及
    -v
    greps匹配不包含
    字段分隔符的行

使用sed

$ sed -n '/^[^,]*$/p' inputFile
9
它的作用是什么?

  • -n
    抑制图案空间的正常打印

  • '/^[^,]*$/
    选择与模式匹配的行,不带任何

    • ^
      将正则表达式锚定在字符串的开头

    • [^,]*
      匹配除

    • $
      将字符串锚定在字符串的末尾

  • p
    action
    p
    使sed打印当前模式空间,即与输入匹配的模式空间


    • 使用awk

      以下awk将是usfull

      $ awk -F, 'NF==1' inputFile
      9
      
      它的作用是什么?

      • -F,
        将字段分隔符设置为

      • NF==1
        匹配具有
        NF
        的行,字段数为1。不提供任何操作,因此会执行默认操作,即打印整个记录。它类似于
        NF==1{print$0}

      • inputFile
        将csv文件输入到awk脚本

      使用grep

      同样的功能也可以使用
      grep

      $ grep -v ',' inputFile
      9
      
      • -v
        选项打印与图案不匹配的线条

      • 以及
        -v
        greps匹配不包含
        字段分隔符的行

      使用sed

      $ sed -n '/^[^,]*$/p' inputFile
      9
      
      它的作用是什么?

      • -n
        抑制图案空间的正常打印

      • '/^[^,]*$/
        选择与模式匹配的行,不带任何

        • ^
          将正则表达式锚定在字符串的开头

        • [^,]*
          匹配除

        • $
          将字符串锚定在字符串的末尾

      • p
        action
        p
        使sed打印当前模式空间,即与输入匹配的模式空间


      试试这个
      bash
      脚本

      #!/bin/bash
      while read -r line
      do
              IFS=","
              set -- $line
              case ${#} in
               1) echo $line;;
               *) continue;;
              esac
      done < file
      
      #/bin/bash
      而read-r行
      做
      IFS=“,”
      设置--$line
      案例${#}in
      1) 回音$线;;
      *)继续;;
      以撒
      完成<文件
      
      试试这个
      bash
      脚本

      #!/bin/bash
      while read -r line
      do
              IFS=","
              set -- $line
              case ${#} in
               1) echo $line;;
               *) continue;;
              esac
      done < file
      
      #/bin/bash
      而read-r行
      做
      IFS=“,”
      设置--$line
      案例${#}in
      1) 回音$线;;
      *)继续;;
      以撒
      完成<文件
      
      awk最灵活。如果您喜欢前两个字段,只需执行以下操作:
      awk-F,'NF
      NF==1{print$0}
      NF==1
      NF==1
      @gboffi这是一个问题还是一个陈述?两者都不是,这是一个简化建议。。。也许是过度的简化,当然是一种神秘的简化。对不起,我说得太简单了,再见from@gboffi但这正是我在回答时首先写的,
      NF==1
      。awk
      是最灵活的。如果您喜欢前两个字段,只需执行以下操作:
      awk-F,'NF
      NF==1{print$0}
      NF==1
      NF==1
      @gboffi这是一个问题还是一个陈述?两者都不是,这是一个简化建议。。。也许是过度的简化,当然是一种神秘的简化。对不起,我说得太简单了,再见from@gboffi但这就是我在回答时首先写的,
      NF==1