Я выполняю "ls-lX" по файлам umbrella31_*.xvg. Я выполняю команду, которая ищет число на пятой колонне вывода команды ls, который больше скажем, чем 20 000. Это похоже на это:
ls -lX umbrella31_*log | awk '{if($5 >=20000) {print}}' | wc -l
и производят число (количество строк, для которых число в столбце 5> 20000).
Когда я включаю вышеупомянутую команду в сценарий:
#!/bin/bash -x
ls -lX umbrella31_*log | awk '{if($5 >=20000) {print}}' | wc -l
и выполненный это, я вхожу в экран результат "ls", распечатанного также (который я не хочу). Как я могу добраться, мой сценарий ведут себя как моя экранная команда и печатают только желаемое количество строк?
Ваш сценарий распечатает каждую из команд в Вашем конвейере к терминалу, потому что Вы выполняете его с -x
флаг. Отman bash
:
-x Print commands and their arguments as they are executed.
Однако Ваше использование подхода ls
и wc
лучший способ не состоит в том, чтобы считать файлы.
Для нахождения файла, который является> = 20000, можно использовать, найдите:
find -type f -maxdepth 1 -name 'umbrella31_*log' -size +19999c -ls
(из-за того, как находят интерпретаторы + знак (больше, чем окруженный), Вы получаете n+1, поэтому нечетное
-size n
)
количество произвело:
(когда мы считаем файлы, мы просто печатаем новую строку, потому что нам действительно не нужен вывод),
wc -l < <(find -maxdepth 1 -type f -name 'umbrella31_*log' -size +19999c -printf \\n)
- maxdepth n
Убывание на большинстве уровней (неотрицательное целое число) уровни каталогов ниже отправных точек.
- размер n
Файл использует n единицы пространства, окружая.
- ls
Перечислите текущий файл в ls-dils формат на стандартном выводе.
После регистрации сценария использовал в вопросе, это было обнаружено:
#!/bin/bash -x
использовался где -x
выводы опции все команды к терминалу.
Удаление -x
решенный исходная проблема.
Вы пропускаете флажковый индикатор аргумента так это:
ls lX umbrella31_*log | awk '{if($5 >=20000) {print}}' | wc -l
должно быть это вместо этого:
ls -lX umbrella31_*log | awk '{if($5 >=20000) {print}}' | wc -l
В моей системе, ища сценарии удара это работает как так:
$ ls -lX *.sh
-rwxrwxr-x 1 rick rick 4183 Jul 1 10:48 aptfileparse.sh
-rwxrwxr-x 1 rick rick 339 Jul 24 17:26 checkrunning.sh
-rwxrwxr-x 1 rick rick 506 Jul 15 17:54 Downloads.sh
-rwxrwxr-x 1 rick rick 78 Jul 6 11:28 runall.sh
$ ls -lX *.sh | awk '{if($5 >=200) {print}}' | wc -l
3