Shell CSV在第三列KSH中查找空白值

Shell CSV在第三列KSH中查找空白值,shell,awk,grep,ksh,Shell,Awk,Grep,Ksh,嗨,我的数据集很简单,如下所示 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) 你的gr

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

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)

你的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

的建议,您的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

的建议,我应该添加一件事。这是一个脚本。因此$3已经被传递到脚本中的变量使用。我如何更改它,使其不会因该参数而烧焦。这在命令行中非常有效,但在我的脚本中不行。awk脚本中的$3是输入中的第三个字段。它与外壳位置参数无关,该参数碰巧也被命名为$3。您必须更清楚地了解您遇到的问题。在脚本中,我有count=$“(awk-F,$3==”{c++}END{print c+0}'$DATAFILE)”。当它运行时,它把我的脚本$3放在你给我看的命令中有$3的地方。使用set-x它会给出类似的+COUNT=$(awk-F,'scripts$3=={c++}END{print c+0}'文件),其中脚本$3是传递到脚本中的第三个参数。你的意思是
“$(…)”
,还是你实际上有
$”(…)
。前者是通用的、有效的语法,idk后者会做什么。我应该补充一件事。这是一个脚本。因此$3已经被传递到脚本中的变量使用。我如何更改它,使其不会因该参数而烧焦。这在命令行中非常有效,但在我的脚本中不行。awk脚本中的$3是输入中的第三个字段。它与外壳位置参数无关,该参数碰巧也被命名为$3。您必须更清楚地了解您遇到的问题。在脚本中,我有count=$“(awk-F,$3==”{c++}END{print c+0}'$DATAFILE)”。当它运行时,它把我的脚本$3放在你给我看的命令中有$3的地方。使用set-x它会给出类似的+COUNT=$(awk-F,'scripts$3=={c++}END{print c+0}'文件),其中脚本$3是传递到脚本中的第三个参数。你的意思是
“$(…)”
,还是你实际上有
$”(…)
。前者是常用的有效语法,idk表示后者的作用。第三个字段是十进制数或空白。前两个字段是静态字段,第三个是合并到行末尾的十进制字段。他们想知道第三个字段中有多少是十进制数。前两列中的字符串周围还有引号。为什么不使用
-c
选项?例如:
grep-c'^[^,]*,[^,]*,'
第三个字段是十进制数或空白。前两个字段是静态字段,第三个是合并到行末尾的十进制字段。他们想知道第三个字段中有多少是十进制数。前两列中的字符串周围还有引号。为什么不使用
-c
选项?例如:
grep-c'^[^,]*,[^,]*,'