sed+;数一数第三栏的单词

sed+;数一数第三栏的单词,sed,Sed,我使用以下awk来计算字段4中出现的所有单词 awk '{print $4}' file | awk '{print NF}' | grep -c 1 我们如何在sed中实现同样的目标 文件示例: 1 2 3 4 1 2 1 2 3 4 5 1 2 1 2 3 1 2 3 4 从文件sed应返回结果3(字段4上有三个单词) yael首先,您的awk效率很低。试试这个: awk '$4{c++}END{print c}' file 顺便说一句,为什么要在sed中使用它?这

我使用以下awk来计算字段4中出现的所有单词

  awk '{print $4}'  file | awk '{print NF}' | grep -c 1
我们如何在sed中实现同样的目标

文件示例:

 1 2 3 4
 1 2 
 1 2 3 4 5
 1 2
 1 2 3
 1 2 3 4
从文件sed应返回结果3(字段4上有三个单词)


yael

首先,您的
awk
效率很低。试试这个:

awk '$4{c++}END{print c}' file
顺便说一句,为什么要在
sed
中使用它?这就是
awk
做得很好的地方。如果您真的希望它出现在
sed
中,我猜是这样的:

sed '/^\s*\S*\s*\S*\s*\S*\s*$/d' file | wc -l
awk
说明:在第四个字段为非空的每一行中,递增c。最后,打印c


sed
说明:删除与regexp匹配的每一行。然后用
wc
计算
sed
输出的行数。regexp基本上说,行中最多可以有两个空格组,不包括初始空格组和最终空格组,这意味着行中最多可以有3个字段。

首先,您的
awk
效率很低。试试这个:

awk '$4{c++}END{print c}' file
顺便说一句,为什么要在
sed
中使用它?这就是
awk
做得很好的地方。如果您真的希望它出现在
sed
中,我猜是这样的:

sed '/^\s*\S*\s*\S*\s*\S*\s*$/d' file | wc -l
awk
说明:在第四个字段为非空的每一行中,递增c。最后,打印c


sed
说明:删除与regexp匹配的每一行。然后用
wc
计算
sed
输出的行数。regexp基本上表示行中最多可以有两个空格组,不包括初始空格组和最终空格组,这意味着行中最多可以有3个字段。

cut
也可以使用:

cut -f 5 -d' ' file | wc -w

选择5。列(由于前导空白,第一列为空)。分隔符为空。

cut
也可用于:

cut -f 5 -d' ' file | wc -w

选择5。列(由于前导空白,第一列为空)。分隔符为空。

这可能适用于您:

sed 's/ *[^ ]*/&/4;t;d;' file | sed -n '$='

这可能适合您:

sed 's/ *[^ ]*/&/4;t;d;' file | sed -n '$='