【问题标题】:CSV find blank value in third column KSHCSV 在第三列 KSH 中找到空白值
【发布时间】:2017-02-19 07:23:18
【问题描述】:

嗨,我的数据集很简单,如下所示

4,a,1.5
t,6,,
6,t,h

我正在尝试使用 awk 或 grep 来计算第三列中有空格的行数。在这种情况下,它将为 1,因为到目前为止,我尝试过的列中只有中间的一个空白。登录尝试使用 awk 搜索空白字符串,然后用 grep find 将其计数相同,其中第三列中有空白,然后计数。

COUNT=$('awk '' $DATAFILE | wc -l')
COUNT=$('grep -e '.*,.*,,' $DATAFILE' | wc -l)

【问题讨论】:

    标签: shell awk grep ksh


    【解决方案1】:

    你的 grep 有很多引号:

    count=$(grep -E ".*,.*,," $DATAFILE | wc -l)
    

    会有点用,但你不想用第四个字段匹配一行。

    似乎更好

    count=$(grep -E "^[^,]*,[^,]*,," $DATAFILE | wc -l)
    

    这仍然会给像这样的输入带来问题

    field1,"field 2 with , insides quotes",,
    

    你的问题没有提到这种情况,你认为这里的第三个领域是什么?那将是另一个问题。

    编辑: @Sundeep 正确评论,您可以使用 grep -c,避免使用 wc -l。我试图说明 OP 的答案有什么问题,但我应该添加使用 -c 的建议。

    【讨论】:

    • 第三个字段是十进制数或空白。前两个字段是静态的,第三个是合并到行尾的小数。他们想知道有多少在第三个字段中有十进制数。前两列中的字符串也有引号。
    • 为什么不使用-c 选项?例如:grep -c '^[^,]*,[^,]*,,'
    【解决方案2】:
    awk -F, '$3==""{c++} END{print c+0}' file
    

    【讨论】:

    • 我应该添加一件事。这是在脚本中。所以 $3 已经被传递给脚本的变量使用了。我怎样才能改变它,使它不会因为那个参数而灼热。这在命令行中完美运行,但在我的脚本中却没有
    • awk 脚本中的 $3 是输入中的第三个字段。它与巧合也被命名为 $3 的 shell 位置参数无关。您必须更清楚自己遇到了什么问题。
    • 在脚本中我有 count=$"( awk -F, '$3==""{c++} END{print c+0}' $DATAFILE )"。当它运行时,它会将我的脚本 $3 放在你显示给我的命令中有 $3 的位置。
    • 使用 set -x 它给出了类似的结果 + COUNT=$( awk -F, 'SCRIPTS$3=={c++} END{print c+0}' file ) 其中 SCRIPTS$3 是第三个参数正在传递到脚本中。
    • 您的意思是"$(...)" 还是您实际上有$"(...)"。前者是常见的、有效的语法,不知道后者会做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多