0

我完全是编程新手,正在尝试编写我的第一个 bash 脚本。

我有一个名为的文件NUMBERS.txt,其中包含各种数字,例如:

1000
1001
1001
1000
1002
1001
etc..

我想编写一个脚本来计算每个数字的出现,将其保存为变量并将其打印到一个新的文本文件中,如下所示:

1001= 3
1000= 2
etc..

我完全被困住了。

这是我到目前为止所拥有的:

 #!/bin/bash

for Count in `grep -c '1000' /NUMBERS.txt `
do
echo 'Count = '${Count}
done

for Count in `grep -c '1001' /NUMBERS.txt `
do
echo 'Count = '${Count}
done
4

3 回答 3

4

对文件进行排序,然后计算每个唯一行出现的次数:

sort NUMBERS.txt | uniq -c
于 2013-08-31T00:54:30.640 回答
1

现在您的文件已经在每一行有一个数字,它更简单

 for i in `sort -u NUMBERS.txt ` ; do count=`grep -c "$i" NUMBERS.txt ` ; echo "$i=$count" ; done  > your_result.txt

或以不同的格式

for i in `sort -u NUMBERS.txt `
do
    count=`grep -c "$i" NUMBERS.txt `
    echo "$i=$count"
done  > your_result.txt

如所问,性能不是很好。这是一个更好的

sort NUMBERS.txt | uniq -c | awk '{print $1,"=",$2}'

基本上你会通过 NUMBERS.txt 两次。第一遍,你得到唯一的数字;第二遍计算每个唯一数字的出现次数。

于 2013-08-31T00:58:27.547 回答
1

我不是最擅长 shell 脚本,但这是一个有效的解决方案,使用 bash 和 grep -c :

#!/bin/bash

INPUT="./numbers.txt"
OUTPUT="./result.txt"

rm -f ${OUTPUT}

# you might want to change the values
for i in {1000..2000}; do
    for Count in `grep -c ${i} ${INPUT}`; do
    echo "${i} = ${Count}" >> ${OUTPUT}
    done
done
于 2013-08-31T01:00:30.097 回答