Вырезать ничего не выводя

Я изначально создал скрипт, используя командную строку:

grep -c "Author" reviews_folder/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

Это сработало, однако мне нужно было сделать его сценарием оболочки, который позволял бы пользователю вводить каталог для поиска, поэтому я изменил его на:

grep -c "Author" $1/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'

После того, как это было выполнено, вместо того чтобы скрипт работал, он просто напечатал много пустых строк.

Любая помощь будет принята с благодарностью. Спасибо!

1 ответ

Я предполагаю, что вы запускаете свой скрипт как: script.sh dir/ или же bash script.sh dir/,

То, как вы передаете каталог, вызывает проблему.

В вашем сценарии вы получили grep команда:

grep -c "Author" $1/*

Если вы передадите каталог с косой чертой, grep команда будет выполнена как:

grep -c "Author" dir//*

Пример:

grep -c "Author" dir//somefile.dat dir//someother-file.dat

И его результат будет похож на:

dir//somefile.dat:5

И ваш cut Команда вернет только пустую строку и передаст ее sort:

dir//somefile.dat:5   # < You are asking for second part which is empty

Так что либо запустите ваш скрипт как: script.sh dir или измените его на что-то вроде этого:

#!/bin/bash

DIR=${1%/}
grep -c "Author" ${DIR}/* | cut -d \/ -f 2 | sort -nt':' -k2 | sed 's/.dat:/ /g'
Другие вопросы по тегам