2015-10-14 71 views
1

我对Linux非常陌生。在Linux中计算分隔字符串中的字数

我有一个分隔字符串,我想找出它的单词数量。

line=100|Surender|Linux 

echo $line '|' | wc -w 

上面的代码给了我2。但预计的数量是3。

有人能帮助我在此

+0

你实际上上面你的代码是呼应两个字符串和管道他们WC做些什么。字符串一是“100 | Surender | Linux”,字符串二是'|'。正如你所看到的,wc正确计算。 – ferdy

+1

是的ferdy,只是学习基本的Linux通过做一些处理,感谢您的回复 –

回答

0

一步一步地建立起来。

wc预计话

之间的空白

你可以使用tr来代替 '|'以空间

~/tmp$ line="100|Surender|Linux" 
~/tmp$ echo $line |tr "|" " " 
100 Surender Linux 

大,所以现在通过管道推动这wc

~/tmp$ echo $line |tr "|" " " |wc 
     1  3  19 
+0

我试过你的解决方案,它的工作..谢谢! –

1

wc理解“字”为“由空格分隔字符的字符串”。在您的例子,有两个词:

1 line=100|Surender|Linux 
2 | 

为了计数“列”,用空格代替竖线:

echo "${line//|/ }" | wc -w 

这将在bash工作,并使用“参数扩展”。如果它不能在你的外壳,你可以达到tr

echo "$line" | tr '|' ' ' | wc -w 
+0

感谢让我明白为什么我的代码给出了2 .. –

1

用AWK

# -F takes delimiter 
# NF means no of fields 
echo $line | awk -F'|' '{ print NF }' 
+0

@Narender谢谢!! –

1

您可以通过数组做到这一点:

$ line="foo|bar|blah" 
$ IFS="|"; read -ra items <<< "$line" 
$ echo ${#items[@]} 
3 

@narendra展示的awk方式更加方便我的眼睛。

而且,不要忘记,尝试蟒蛇方式:

$ python -c "print len('${line}'.split('|'))" 
3