Если вы положите /
в конце образца подстановки, шаблон будет соответствовать каталогам и символическим ссылкам на каталоги. Следует следующий фрагмент считает каталоги и символические ссылки в текущем каталоге.
set -- */ .*/
if ! [ -e "$1" ]; then shift; fi # handle the case when */ matches nothing
echo $(($# - 2)) # -2 for . and ..
В Bash вы можете упростить это на
shopt -s dotglob nullglob
dirs=(*/)
echo ${#dirs[@]}
, если вы не хотите включить каталоги, используйте Найти
. Если ни один из каталогов не имеет имя, которое содержит новую строку, вы можете подсчитать строки:
find . -name . -o -type d -print -prune | wc -l
, чтобы быть полностью простым, вместо этого подсчитываться.
find . -name . -o -type d -print -prune | tr -dc / | wc -c
cut -d'|' -f1-3 myfile
Это будет более простое решение. Работает отлично!
Используя OFS
и FS
( Вывод) Разделитель полей, просто распечатайте первые 3 столбца
$ awk 'BEGIN{OFS=FS="|"}{print $1,$2,$3}' file.txt
Hello|how|are
Lilly|jasmine|rose
Используя sed, оставьте только первые два « | [все, что не |]
»:
~$ sed 's/\(\(|[^|]*\)\{2\}\).*/\1/' file.txt
Hello|how|are
Lilly|jasmine|rose
В awk
достаточно сделать:
awk 'BEGIN{FS=OFS="|"}; NF=3' myfile.txt
(Если у вас 17 столбцов, как указано в каком-то комментарии, просто измените 3
на 17
.)