计算输入文件linux中列的特定数字

时间:2014-04-20 04:49:54

标签: linux bash unix search count

我试图读取一个文件并计算特定地点的特定数字,并显示它出现的次数,例如: 第一个字段是数字,第二个字段是品牌名称,第三个字段是它们所属的组,第四个和第五个字段不重要。

1:audi:2:1990:5
2:bmw:2:1987:4
3:bugatti:3:1988:19
4.buick:4:2000:12
5:dodge:2:1999:4
6:ferrari:2:2000:4

作为输出,我想按第3列进行搜索,并将2个(按品牌名称)组合在一起并计算其中有多少个。 我正在寻找的输出应该是这样的:

1:audi:2:1990:5
2:bmw:2:1987:4
5:dodge:2:1999:4
6:ferrari:2:2000:4

4 - >显示有多少行。 我试过采用这种方法,但无法弄清楚:

file="cars.txt"; sort -t ":" -k3 $file   #sorting by the 3rd field
grep -c '2' cars.txt   # this counts all the 2's in the file including number 2.

我希望你理解。并提前谢谢你。

3 个答案:

答案 0 :(得分:3)

我不确定你的意思是"按品牌名称"组合在一起,但以下内容将为您提供您所描述的输出。

awk -F':' '$3 == 2' Input.txt

如果您想要一个行数,可以将其传递给wc -l

awk -F':' '$3 == 2' Input.txt | wc -l

答案 1 :(得分:1)

我猜第4行是4:别克而不是4.buick。然后我建议这个

$ awk 'BEGIN{FS=":"} $3~2{total++;print} END{print "TOTAL --- "total}' Input.txt

答案 2 :(得分:0)

普通bash解决方案:

#!/bin/bash

while IFS=":" read -ra line; do
if (( ${line[2]} == 2 )); then
    IFS=":" && echo "${line[*]}"
    (( count++ ))
fi
done < file
echo "Count = $count"

输出:

1:audi:2:1990:5
2:bmw:2:1987:4
5:dodge:2:1999:4
6:ferrari:2:2000:4
Count = 4