如何从awk获取总计列

如何从awk获取总计列,awk,Awk,我正在测试awk,我有了这个想法。所以我们知道 raja@badfox:~/Desktop/trails$ cat num.txt 1 2 3 4 1 2 3 4 4 1 2 31 raja@badfox:~/Desktop/trails$ awk '{ if ($1 == '4') print $0}' num.txt 4 1 2 31 raja@badfox:~/Desktop/trails$ 因此,命令将在filename num.txt

我正在测试awk,我有了这个想法。所以我们知道

raja@badfox:~/Desktop/trails$ cat num.txt
1   2   3   4
1   2   3   4
4   1   2   31
raja@badfox:~/Desktop/trails$ awk '{ if ($1 == '4') print $0}' num.txt
4   1   2   31
raja@badfox:~/Desktop/trails$ 
因此,命令将在filename num.txt的第一列检查4

所以现在我想要输出,因为在第4列有一个4,例如,如果我有100列信息,我想要得到的输出是我搜索的术语中有多少列


我的意思是,从上面的示例中,我希望第4列和第1列作为输出,我正在搜索第4列

您正在查找
NF
变量。这是行中的字段数

下面是一个如何使用它的示例:

{
    if (NF == 8) {
        print $3, $8;
    } else if (NF == 9) {
        print $3, $9;
    } 
}
或在循环内:

# This will print the line if any field has the value 4
for (i=1; i<=NF; i++) {
    if ($i == 4)
        print $0
}
#如果任何字段的值为4,这将打印该行

对于(i=1;i您正在查找
NF
变量。它是行中的字段数

下面是一个如何使用它的示例:

{
    if (NF == 8) {
        print $3, $8;
    } else if (NF == 9) {
        print $3, $9;
    } 
}
或在循环内:

# This will print the line if any field has the value 4
for (i=1; i<=NF; i++) {
    if ($i == 4)
        print $0
}
#如果任何字段的值为4,这将打印该行

对于(i=1;i如果您试图查找包含搜索项的行(在本例中为值4),并且您希望统计行中出现了多少这样的值(以及行的数据),那么您需要如下内容:

awk '{ count=0
       for (i = 1; i <= NF; i++) if ($i == 4) count++
       if (count) print $i ": " $0
     }'

如果您试图查找包含搜索项的行(在本例中为值4),并且希望计算该行中出现的此类值的数量(以及该行的数据),那么您需要以下内容:

awk '{ count=0
       for (i = 1; i <= NF; i++) if ($i == 4) count++
       if (count) print $i ": " $0
     }'

awk新手,你能告诉我如何使用它吗?循环版本会为每一个包含4的列打印一行,我认为这太过分了。@JonathanLeffler:你完全正确。我只是想展示一个使用
NF
变量的示例。如果你觉得这个示例可以做得更好,请务必编辑它并改进e it:)工作正常,第二个示例适合我。谢谢。@August:你确定你理解Jonathan在上面的评论中所说的话吗?如果单独的字段的值为4,则行
print$0
将被执行多次。小心这个陷阱!awk新手,你能告诉我如何使用它吗?循环版本将打印一次该行r每列包含4,我认为这太过分了。@JonathanLeffler:你完全正确。我只是想展示一个使用
NF
变量的示例。如果你觉得这个示例可以做得更好,请务必编辑并改进:)有效,第二个示例适合我。谢谢。@August:你确定你理解乔纳森在上述评论中所说的话吗?如果单独字段的值为4,则将多次执行行
print$0
。当心那个陷阱!我被第3栏中提到的值4弄糊涂了……你能澄清这个问题吗(因为我在第3栏中看不到任何4)?@JonathanLeffler抱歉,现在编辑好了,看起来不错。我被第3栏中提到的值4弄糊涂了……你能澄清这个问题吗(因为我在第3栏中看不到任何4)?@JonathanLeffler抱歉现在编辑好了,看起来很好。非常感谢您的解释。非常感谢您的解释。