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

これで、ファイルの各行に 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 回調べます。最初のパスでは、一意の番号を取得します。2 番目のパスでは、各一意の番号の出現をカウントします。

于 2013-08-31T00:58:27.547 に答える
1

私はシェルスクリプトが得意ではありませんが、 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 に答える