2013-12-08 86 views
3

我有一個文件中有一堆文字,用換行符隔開:在命令行上執行多級文本操作?

ex。

"This is sentence 1.\n" 
"This is sentence 2.\n" 
"This is sentence 3. It has more characters then some other ones.\n" 
"This is sentence 4. Again it also has a whole bunch of characters.\n" 

我希望能夠使用一些組命令行工具,這將對於每個行,計算每行的字符數,然後,如果有超過每該行X個字符,按句點分割(「。」),然後計算分割線每個元素中的字符數。

ex。最終的輸出,通過行號:

1. 24 
2. 24 
3. 69: 20, 49 (i.e. "This is sentence 3" has 20 characters, "It has more characters then some other ones" has 49 characters) 

wc只需要輸入一個文件名,所以我無法指揮它,它採取的文本字符串做字符數

head -n2 processed.txt | tr "." "\n" | xargs -0 -I line wc -m line 

給我的錯誤: 「:開:沒有這樣的文件或目錄」

+0

歡迎來到SO!標籤*命令行*有點過於籠統。你應該指定你正在使用的shell,因爲答案會因shell而異。在這種情況下,它似乎是bash或sh + POSIX utils。 –

+0

* wc只將輸入文件名稱作爲輸入* - 實際上它可以從stdin開始工作。試試'echo hello | wc -c' – damienfrancois

+0

有點晚了,但感謝您的建議! –

回答

2

awk是完美的。下面的代碼應該讓你開始,你可以計算出其餘:

awk -F. '{print length($0),NF,length($1)}' yourfile 

輸出:

23 2 19 
23 2 19 
68 3 19 
70 3 19 

它使用句點作爲字段分隔符(-F),打印的長度整條線($ 0),字段數(NF)和第一個字段的長度($ 1)。

這裏是打印整行和每個字段的長度的另一小例如:

awk -F. '{print $0;for(i=0;i<NF;i++)print length($i)}' yourfile 
"This is sentence 1.\n" 
23 
19 
"This is sentence 2.\n" 
23 
19 
"This is sentence 3. It has more characters then some other ones.\n" 
68 
19 
44 
"This is sentence 4. Again it also has a whole bunch of characters.\n" 
70 
19 
46 

順便提一句,「WC」可以處理髮送到其標準輸入這樣的字符串:

echo -n "Hello" | wc -c 
5 
0

如何:

head -n2 processed.txt | tr "." "\n" | wc -m line 

您應該更好地瞭解xargs的功能以及管道的工作方式。做谷歌的一個很好的教程之前,使用它們=)。

xargs將每行分別傳遞給下一個實用程序。這不是你想要的:你想wc在這裏得到所有的線。所以只需將tr的整個輸出傳送給它。