使用仅包含一列的行输出csv

时间:2014-11-07 06:41:36

标签: bash awk

输入csv文件

sid,storeNo,latitude,longitude
2,1,-28.03720000,153.42921670
9

我希望只输出一列的行,在本例中它是第3行。 如何在bash shell脚本中完成?

2 个答案:

答案 0 :(得分:4)

使用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操作p使sed打印当前模式空间,即与输入匹配的模式空间

答案 1 :(得分:0)

试试这个bash脚本

#!/bin/bash
while read -r line
do
        IFS=","
        set -- $line
        case ${#} in
         1) echo $line;;
         *) continue;;
        esac
done < file