2013-12-08 44 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的整个输出传送给它。