计算 Bash Shell 中每列的行数

  • 本文关键字:Bash Shell 计算 bash unix
  • 更新时间 :
  • 英文 :


我是Bash Shell的新手,我无法在网上找到有用的资源(也许有人可以为我推荐一些资源(。我正在处理一个 csv 文件,我想知道如何在没有空值的情况下获取每列的行数。

我知道我们使用此代码来计算文件中的行数。但是,如果我想指定列怎么办?

cat FILE_NAME | wc -l

例如,我有以下csv文件

ID   Name
------------
13    Sara
22    Suzan
null  Mark
49    John

我希望 ID 列的计数返回 3。

谢谢

基于所需输出的假设,您已经给出了

$ cat testfile 
ID   Name
------------
13    Sara
22    Suzan
null  Mark
49    John
$ awk '$1 ~ /^[0-9]*$/{ count++ }END{print count}' testfile 
3
$ awk 'function is_num(x){return(x==x+0);} is_num($1){ count++ }END{print count}' testfile 
3

在 bash 世界中,列是你制作的,通常是通过设置名为field separator (delimiter)的东西。生态系统中存在一些混乱。通常分隔符只有一个字符,通常默认<tab>(cutpaste、...(。但是例如,如果您不手动设置,sortawk使用整个空白作为分隔符(但您只能设置一个字符,如果需要<tab>,请使用例如awk -F$'t'(。

如果你的数据看起来像你的问题 - 也就是说它有固定宽度的列 - 你会更好地使用awk,除非其中一列中有一个空字段(awk '{print $1}'(。解析固定宽度格式的另一个选项是例如cut -c1-4(从每行打印字符 1 到 4,这将是您的 ID(。

然后计算非空值。您想先跳过标头,这在您的情况下tail -n +3,并且您的"空"字段是字符串匹配,因此建议grep(grep -v -c 'null'(。

您可以通过从后面删除管道(并添加head(来逐段测试管道。

<input tail -n +3 |
cut -c1-4 |
grep -v -c 'null'

您可以按照之前的建议使用grepcutawk。主要思想是计算列的空值,然后从行数中减去您计算的空值的数量,以找出没有空值的空值。

最新更新