我试图读取一个文件并计算特定地点的特定数字,并显示它出现的次数,例如: 第一个字段是数字,第二个字段是品牌名称,第三个字段是它们所属的组,第四个和第五个字段不重要。
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.
我希望你理解。并提前谢谢你。
答案 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