Рейтинг:0

Количество слов для нескольких файлов .txt в Linux

флаг mx

Мне нужно найти слова в нескольких файлах .txt с помощью linux cli. В настоящее время я использую следующую команду:

кот *.txt|туалет -w

Я создал тестовый каталог, чтобы попрактиковаться в команде, и, похоже, он работает для каждого отдельного файла .txt, но не может сделать это правильно для всех файлов .txt. У меня есть каталог с 5 файлами, в которых 4 из них содержат каждые 5 слов, а 1 - пустой. Для отдельных текстовый файл кота.txt|wc -w он дает правильный ответ. Но для подсчета выдает 17, когда должно быть (4 умножить на 5 + 0 умножить на 0 =) 20 Может ли кто-нибудь сказать мне, почему указанный счет равен 17, а реальный счет равен 20?

pLumo avatar
флаг in
не может воспроизвести, вам нужно будет добавить свои входные файлы.
pLumo avatar
флаг in
Эти ссылки не имеют никакого отношения к вопросу.
Рейтинг:3
флаг tr

Вы можете запустить

wc -w *.txt

Это даст вам количество слов для каждого файла и общую сумму в последней строке.

Как оказалось, проблема ОП заключалась в отсутствующей новой строке в одном из файлов. Это вызвало кот *txt объединить несколько слов в одно и, следовательно, привести к неправильному счету. Приведенная выше команда более надежна в этой ситуации, поскольку обрабатывает каждый файл по отдельности.

флаг mx
Я выяснил, почему не было разделителя, поэтому последний символ из предыдущего файла присоединялся к первому символу следующего файла.
флаг mx
Спасибо @wayne_yux, я боролся с этим все утро, приближался крайний срок. Такая глупая мелочь, твоё решение работает, ГЕРОЙ :)
Maarten Meijer avatar
флаг fr
Если вы поместите новую строку или пробел в конце всех файлов (например, это происходит автоматически с `echo`), вы можете просто использовать команду в вопросе
Wayne_Yux avatar
флаг tr
@pLumo, выполнив сначала `кошку`, даст вам только общее количество слов. Если вы запустите `wc -w` для всех файлов, вы получите номер для каждого файла. Это упрощает отладку. Как кажется, проблема ОП заключалась в том, что в конце одного файла не было новой строки. Это привело бы к тому, что «кошка» объединила бы несколько слов. Если вы обрабатываете файлы по отдельности, этого не происходит
pLumo avatar
флаг in
правда правда :-) имеет смысл.
Рейтинг:1
флаг hr

Наиболее вероятное объяснение состоит в том, что последние строки ваших файлов не завершаются должным образом символом новой строки, поэтому, когда вы кот их, первое слово следующего файла добавляется к последнему слову предыдущего файла:

Бывший. данный

steeldriver@pc:~$ printf 'foo\nbar\nbaz\nbam\nboo' | тройник {1..4}.txt
фу
бар
баз
бац
boosteeldriver@pc:~$ printf '' > 5.txt

тогда

steeldriver@pc:~$ wc -w {1..5}.txt
 5 1.txt
 5 2.txt
 5 3.txt
 5 4.txt
 0 5.txt
всего 20

но

steeldriver@pc:~$ cat {1..5}.txt | туалет -ш
17

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.