2015-10-14 4 views
1

Я очень новичок в Linux.Подсчет количества слов в разделительной строке в Linux

У меня есть строка с разделителями, и я хочу узнать количество слов в ней.

line=100|Surender|Linux 

echo $line '|' | wc -w 

Приведенный выше код дает мне 2. Но ожидаемый счет равен 3.

Может кто-нибудь помочь мне в этом

+0

Что вы на самом деле делать с вашим кодом выше вторя две строки и обжигающе их туалет. string one - «100 | Surender | Linux», строка 2 - «|». wc правильно вычисляет, как вы можете видеть. – ferdy

+1

Да, ferdy, Just Learning basic Linux, сделав несколько handson, Спасибо за ваш ответ –

ответ

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 

Более удобным для меня способом является awk-способ, показанный @narendra.

И, чтобы не забыть, попробуйте питон путь:

$ python -c "print len('${line}'.split('|'))" 
3 
Смежные вопросы