順序は関係ありません
sort filepath | uniq -c
( Jeanが提案するように) Pythonでこれを本当に実行したい場合は、次のようにします。
import collections
with open('path/to/file') as f:
counts = collections.Counter(f)
outfile = open('path/to/outfile', 'w')
for line,occ in counts.iteritems():
outfile.write("%s repeat %d\n" %(line.strip(), occ))
outfile.close()
注文が重要な場合
順序が重要な場合(入力ファイルのi
エントリの前にエントリが表示される場合は、出力ファイルのエントリの前にエントリが表示される必要があります)、必要なのは変更されたランレングスエンコーダです。ただし、次の入力ファイルがある場合は注意してください。j
i
j
v1
v1
v1
v2
v2
v3
v1
次に、出力ファイルは次のようになります。
v1 repeat 3
v2 repeat 2
v3
v1
with open('infilepath') as infile:
outfile = open('outfilepath', 'w')
curr = infile.readline().strip()
count = 1
for line in infile:
if line.strip() == curr:
count += 1
else:
outfile.write(curr)
if count-1:
outfile.write(" repeat %d\n" %count)
else:
outfile.write("\n")
curr = line.strip()
count = 1
outfile.write(curr)
if count-1:
outfile.write(" repeat %d\n" %count)
outfile.close()
もちろん、uniq -c infilepath > outfilepath
同じことをします
お役に立てれば