Вырезать ничего не выводя
Я изначально создал скрипт, используя командную строку:
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'