gpt4 book ai didi

linux - 计算 grep 结果在 bash 脚本中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:37 25 4
gpt4 key购买 nike

我的问题不好问,我尝试用下面的例子来解释这个问题:

/home/luther/tipical_surnames.txt

Smith
Johnson
Williams
Jones
Brown
#Davis
Miller
Wilson
#Moore
Taylor
Anderson

/home/luther/employers.txt

2000    Johnson     A lot-of details / BJC3000,6000, i550                0
2101 Smith A lot-of details / BJC3000,6000, i550 0
2102 Smith A lot-of details / BJC3000,6000, i550 0
2103 Jones A lot-of details / BJC3000,6000, i550 0
2104 Johnson A lot-of details / BJC3000,6000, i550 0
2100 Smith A lot-of details / BJC3000,6000, i550 0

我有一个包含最喜欢的姓氏的列表,另一个包含雇主的名字。让我们使用控制台检查一下公司中有多少人拥有最受欢迎的姓氏:

grep -v "#" /home/luther/tipical_surnames.txt | sed -n 1'p' | cut -f 1
Smith
grep Smith /home/luther/employers.txt | wc -l
230

工作完美。现在让我们使用简单的 bash 脚本检查前 5 个最流行的姓氏:

#!/bin/bash
counter=1
while [ $counter -le 5 ]
do
surname=`grep -v "#" /home/luther/tipical_surnames.txt | sed -n "$counter"'p' | cut -f 1`
qty=`grep "$surname" /home/luther/employers.txt | wc -l`
echo $surname
echo $qty
counter=$(( $counter + 1 ))
done

结果如下:

Smith
0
Johnson
0
Williams
0
Jones
0
Brown
0

怎么了?

更新:就像我写的那样,我在其他计算机上测试了脚本,一切正常。我尝试以下操作后:

root@problematic:/var/www# cat testfile.bash
#!/bin/bash
for (( c=1; c<=5; c++ ))
{
echo $c
}

root@problematic:/var/www# bash testfile.bash
testfile.bash: line 2: syntax error near unexpected token `$'\r''
'estfile.bash: line 2: `for (( c=1; c<=5; c++ ))
root@problematic:/var/www# echo $BASH_VERSION
4.2.37(1)-release
root@problematic:/var/www#

当然,在其他计算机上,这个简单的脚本可以按预期工作,没有错误。

最佳答案

这显然未经测试,因为您还没有发布示例输入,但这是您应该使用的方法:

awk '
NR==FNR { if (!/#/) cnt[$1]=0; next }
{ cnt[$WHATEVER]++ }
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (name in cnt) {
print name, cnt
if (++c == 5) {
break
}
}
}
' /home/luther/tipical_surnames.txt /home/luther/employers.txt

将“WHATEVER”替换为在雇主.txt 中存储员工姓氏的字段编号。

上面使用 GNU awk 进行排序,对于其他 awks,我只需从输出循环中删除 PROCINFO 行和计数,并将输出通过管道传送到排序然后 head,例如:

awk '
NR==FNR { if (!/#/) cnt[$1]=0; next }
{ cnt[$WHATEVER]++ }
END {
for (name in cnt) {
print name, cnt
}
}
' /home/luther/tipical_surnames.txt /home/luther/employers.txt | sort -k2,1nr | head -5

或者任何正确的排序选项。

关于linux - 计算 grep 结果在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674273/

25 4 0
文章推荐: linux - 无法通过公共(public)IP访问EC2 Linux实例上的站点
文章推荐: jQuery:将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com