2017-11-15 18 views
0

を印刷し、別のファイルの先頭にそのカウント#(例3)、および印刷/猫を取ります、3回、この特定の文字列数文字列と私は「X」ファイル内の特定の文字列「博士」の発生をカウントしようとしています新しいoutfileに

Graduate StudentID 1 
Graduate StudentID 2 
Graduate StudentID 3 

StudentIDの後の数字は、カウントを反映しています。この時点まで

私の絶望的な試みがある($ OUTが書き込まファイルになっていた)、私は(明らかに)生じたエラーを解決する方法がわからないです。ここで

find /home/college/Applications/Graduate -name "*.inp" -exec sed 's/[PhD]//g' input | uniq -c print >$OUT {$1} \; 
+1

であることを前提として[博士]' '、「文字 'P' のいずれかでありますh 'または' D 'おそらく '[]'は必要ありません。次に '-exec'節にパイプを置くことはできません。' -exec bash -c 'コマンドが必要です。あなたがそれを望むならば、「コマンド」。 –

+0

ありがとう@BenjaminW。これはあなたの提案に近いですか? {/ホーム/大学/アプリケーション/大学院-name見つける "* .INP" -execのbash -cのsed -i -rさん/博士// G '「入力| uniq 'echo {$ 1} \;} – jnorth

+0

ちょっと混乱します。 1つのファイル、または '/ home/college/Applications/Graduate'に含まれているすべての' .inp'ファイルで発生をカウントしますか? –

答えて

1

私はそれを行うだろうかです:

#!/bin/bash 

# Count number of occurrences 
# Use -o | wc -l instead of -c to count multiple occurrences in same line 
count=$(grep -ro 'PhD' --include='*.inp' /home/college/Applications/Graduate | wc -l) 

# Intermediate file 
tmp=$(tempfile) 

# Output file 
out=outfile.txt 

{ 
    # Print header lines 
    for ((i = 1; i <= count; ++i)); do 
     printf '%s %d\n' 'Graduate StudentID' "$i" 
    done 

    # Print existing contents 
    cat "$out" 
} > "$tmp" 

# Rename intermediate file 
mv "$tmp" "$out" 

これは、出力ファイル名が `outfile.txt

+0

これはエレガントな見た目のソリューションです。他の目的に比べてはるかに優れたアプローチと高度にカスタマイズ可能です。私はそのようにテストするようになるでしょう。 "wc -l"では、-lは何のために使われますか?ありがとうございました。 – jnorth

+0

@jnorthパイプからの出力の行(したがって "ell")を数えます。理論的には、 'grepの-c'はすでにカウントを行うことができますが、それは彼らだけが行ごとに検索用語の複数の出現が含まれている場合でも、一致する行の数をカウントします。 '-o'は全てのマッチをそれ自身の行に出力し、' wc -l'は行を数えます。 –

+0

ありがとうございました!尋ねる前にクイック検索を行っていましたが、アクセシブルな説明が見つかりませんでした。 – jnorth

関連する問題