2012-04-19 239 views
77
wc -l file.txt 

輸出行數和文件名。如何讓「wc -l」只打印沒有文件名的行數?

我只需要數字本身(不是文件名)。

我能做到這一點

wc -l file.txt | awk '{print $1}' 

但也許有更好的辦法嗎?

+10

' wc -l <​​file.txt>可以精確而簡潔地完成這項工作。 – 2012-04-19 23:55:10

+0

[在bash中只能得到wc的整數]可能的重複(http://stackoverflow.com/questions/3746947/get-just-the-integer-from-wc-in-bash) – 2015-11-19 23:05:04

回答

126

試試這個方法:

wc -l < file.txt 
+1

在AIX ksh中,該數字前面總是有一個空格。我們必須使用| awk'{print $ 1}'或剪切,以修剪空間。另一種修剪方法是使用回聲。 – rao 2014-02-18 02:58:36

+0

@rao是正確的,這將在數字前添加一個空格。我的解決方案解決了這個問題,並且比awk或cut更簡單。 – 2015-04-19 09:17:02

+0

@rao bash沒有空間。空間來自ksh的位置在哪裏? 'wc -l'不應該發出一個,爲什麼ksh會在一個空格中預先輸出一個程序的標準輸出? – 2017-07-12 12:53:38

15
cat file.txt | wc -l 

根據the man page(用於BSD版本,我沒有GNU版本檢查):

如果沒有指定文件,則使用標準輸入,沒有文件 名顯示爲 。該提示將接受輸入,直到接收到EOF或在大多數環境中的[^ D]。

+2

我不喜歡貓 - 連接消耗很多時間。 – PoGibas 2012-04-19 23:43:21

+8

'wc -l <​​file.txt'具有相同的效果。 – pjmorse 2012-04-19 23:44:10

+0

@user:測試它。到目前爲止,最慢的部分將從磁盤讀取文件。 – sarnold 2012-04-19 23:44:11

8

如何

wc -l file.txt | cut -d' ' -f1 

即管wc輸出到cut(其中分隔符是空格,並挑選僅僅是第一場)

+3

這不比'wc -l file.txt | awk'{print $ 1}'OP試過了。 – doubleDown 2013-08-06 00:16:44

+0

比'wc -l <​​file.txt'方法快。但是必須使用'|只要'wc'命令返回一個前導空格,例如:「34068289 file.txt」,而不是「34068289 file.txt」,就可以在BSD上剪切-d''-f2'。 – 2018-01-07 16:53:06

4

怎麼樣

grep -ch "^" file.txt 
+1

不錯。非常原創/創造性地使用'grep',但是檢查結果(不出意外)是比我的測試中簡單/直接的'wc'方法慢2倍到6倍。 – arielf 2017-04-21 04:41:43

7

要做到這一點,而不領先的空間,爲什麼不:

wc -l < file.txt | bc 
+0

我得到這個語法錯誤(Ubuntu 14.04)。我認爲文件名有問題。 – MERose 2015-07-07 23:34:23

+0

在RHEL 6.7上引發錯誤: $ wc -l file.csv | BC (standard_in)1:語法錯誤 (standard_in)1:非法字符:N (standard_in)1:語法錯誤 (standard_in)1:語法錯誤 – 2016-05-19 20:09:21

+1

我也得到了解析錯誤,但你可以用結合這使用'wc -l <​​file.txt'修復解析錯誤並刪除空格的其他答案:'wc -l <​​file.txt | bc' – jangosteve 2016-08-16 16:28:59

2

顯然,有很多這樣的解決方案。 這裏是另外一個,但:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

這隻輸出的行數,但尾部的換行符(\n)存在,如果你不想做,要麼,與[:space:]更換[:blank:]

0

最好的辦法是首先的查找目錄中的所有文件,然後使用AWK NR(的記錄可變數目)

下面

是命令:

find <directory path> -type f | awk 'END{print NR}' 

例如: - find /tmp/ -type f | awk 'END{print NR}'