2016-12-16 22 views
0

wc -lはファイル内の行数を数えることができると聞きました。しかし、それを使ってPythonで生成されたファイルの行数をカウントすると、別の結果が得られます。wc -lとcat -nを使って、ファイルのカウント行番号が異なる場合の結果が異なる

ここにMWEがあります。

#!/usr/bin/env python                     

import random                       

def getRandomLines(in_str, num):                   
    res = list()                      
    lstr = len(in_str)                     
    for i in range(num):                    
     res.append(''.join(random.sample(in_str, lstr)))             
    return res                       

def writeRandomLines(rd_lines, fname): 
    lines = '\n'.join(rd_liens)                 
    with open(fname, 'w') as fout:                  
     fout.write(lines)                                  

if __name__ == '__main__':                    
    writeRandomLines(getRandomLines("foobarbazqux", 20), "example.txt") 

これは、ランダムな文字列の20行を含むファイル、example.txtを与えます。したがって、example.txtの行数の除外は20です。しかし、wc -lを適用すると、結果として19となります。 1は、行番号と、ファイルの内容を表示するためにcat -nを使用する場合、

$ wc -l example.txt 
19 example.txt 

1は

$ cat -n example.txt 
    1 oaxruzaqobfb 
    2 ozbarboaufqx 
    3 fbzarbuoxoaq 
    4 obqfarbozaxu 
    5 xoqbrauboazf 
    6 ufqooxrababz 
    7 rqoxafuzboab 
    8 bfuaqoxaorbz 
    9 baxroazfouqb 
    10 rqzafoobxaub 
    11 xqaoabbufzor 
    12 aobxbaoruzfq 
    13 buozaqbrafxo 
    14 aobzoubfarxq 
    15 aquofrboazbx 
    16 uaoqrfobbaxz 
    17 bxqubarfoazo 
    18 aaxruzofbboq 
    19 xuaoarzoqfbb 
    20 bqouzxraobfa 

なぜwc -lミスカウント1行を見ることができる、と私は、この問題を修正するために何ができますか?

ヒントやヒントがあります。あなたのpythonのコードで

+0

で各行を終了19.

となりますか?正確な結果を得るために、さまざまな改行のフレーバーを翻訳しなければならなかった時があります。 – Phix

答えて

4

、あなたが持っている:

lines = '\n'.join(rd_liens)                 

をそれでは、あなたが本当に書いていることは次のとおりです。

残念ながら
word1\nword2\n...wordX-1\nwordX 

man wcに:それゆえ

-l, --lines 
    print the newline counts 

あなたの違い。

2

明らかにwc -lは、行の末尾に\nが1つと数える必要があります。現在の書式は末尾に\nの最後の行があるため、wc -lでカウントされません。改行を追加すると修正されるはずです。

2

wc -lは、改行文字の数だけをカウントします。 '\n'文字の行を追加するため、20行を結合するためには、19 '\n'文字のみが使用されました。そのため、ファイルの末尾に改行があり、あなたが正しいのカウントが必要な場合は、'\n'

関連する問題