簡體   English   中英

“grep -c”與“wc -l”

[英]“grep -c” versus “wc -l”

我正在處理一些大型文本文件,即。 將它們從一種格式轉換為另一種格式。 文件的原始格式存在一些細微差別,但是 - 在少數情況下進行了一些預處理 - 它們大部分都是使用我創建的bash shellcript成功轉換的。

到目前為止一切都那么好,但有一件事令我困惑。 有時,腳本會設置一個名為$iterations的變量,以便它知道執行特定for循環的次數。 此值由腳本創建的臨時文件中的空行數確定。

因此,我的腳本的原始版本包含以下行:

    iterations=$(cat tempfile | grep '^$' | wc -l)

到目前為止,除了其中一個文本文件之外,其他所有文件都沒有正常工作,它們似乎沒有正確設置$iterations變量,即使在tempfile似乎有超過20,000個空行,也給出了值'1'。

但是,在發現grep -c ,我將行改為:

    iterations=$(cat tempfile | grep -c '^$')

並且劇本突然起作用,即。 $iterations設置正確。

誰能解釋為什么這兩個版本會產生不同的結果? 為什么第一個版本適用於某些文件而不適用於其他文件? 是否有一些上限值,其中wc -l默認為1? 這不會與第一個版本的工作文件是最大的一個,但不是在集(其正確地轉換第一次) 最大

如果輸入不是文本文件,則grep將打印單行Binary file (standard input) matches ,並且wc -l將計算該行! 但是grep -c會愉快地計算文件中的匹配數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM