我是Linux新手。
我有一个分隔的字符串,我想找出其中的字数。
line=100|Surender|Linux
echo $line '|' | wc -w
上面的代码给了我2。但是预期的数量是3。
有人可以帮助我吗
答案 0 :(得分:1)
wc
将“单词”理解为“由空格分隔的字符串”。在您的示例中,有两个词:
1 line=100|Surender|Linux
2 |
为了计算“列”,请用空格替换竖线:
echo "${line//|/ }" | wc -w
这可以在bash
中使用,并使用“参数扩展”。如果它在您的shell中不起作用,您可以访问tr
:
echo "$line" | tr '|' ' ' | wc -w
答案 1 :(得分:1)
使用awk
# -F takes delimiter
# NF means no of fields
echo $line | awk -F'|' '{ print NF }'
答案 2 :(得分:1)
你可以通过数组来实现:
$ line="foo|bar|blah"
$ IFS="|"; read -ra items <<< "$line"
$ echo ${#items[@]}
3
更加方便我的眼睛是@narendra显示的awk方式。
并且,不要忘记,尝试python方式:
$ python -c "print len('${line}'.split('|'))"
3
答案 3 :(得分:0)
逐步建立起来。
wc
期望单词之间有空格
您可以使用tr
替换“|”空间
例如
~/tmp$ line="100|Surender|Linux"
~/tmp$ echo $line |tr "|" " "
100 Surender Linux
很好,所以现在通过管道推送到wc
~/tmp$ echo $line |tr "|" " " |wc
1 3 19