Bash脚本保存grep -c结果

时间:2013-08-31 00:49:52

标签: bash

我是编程新手,我正在尝试编写我的第一个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

3 个答案:

答案 0 :(得分:4)

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

sort NUMBERS.txt | uniq -c

答案 1 :(得分: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}'

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

答案 2 :(得分: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