2016-12-16 139 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") 

這給出了一個文件,example.txt,包含20行隨機字符串。因此,example.txt中行數的預期爲20。但是,如果將wc -l應用於此,則結果爲19

$ wc -l example.txt 
19 example.txt 

當人們使用cat -n顯示文件的內容,行號,可以看到

$ 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計數錯誤一條線,我能做什麼來解決這個問題?

任何線索或提示將不勝感激。

+0

是否有一個換行符在文件的結尾?有些時候我不得不翻譯各種換行版本來獲得準確的結果。 – Phix

回答

4

在Python代碼,您有:

lines = '\n'.join(rd_liens)                 

所以你真正寫的是:

word1\nword2\n...wordX-1\nwordX 

不幸的是,在man wc

-l, --lines 
    print the newline counts 

因此你的差異。

2

顯然wc -l需要在行的末尾看到一個\n以將其計爲一。您目前的格式有最後一行,沒有尾隨\n,因此不計算在wc -l。添加換行符,它應該被修復。

2

wc -l只計算新行字符的數量。 由於您正在使用'\n'字符追加行,因此只能使用20個行來使用19個'\n'個字符。因此,導致作爲19

如果您需要正確的計數,終止每一行'\n'