Если вы хотите разбить на пустые строки,
awk '{printf $0; printf ($0=="")? "\n" : " "}' /path/to/file.txt
printf $0
:распечатать текущую строку (без новой строки)printf ($0=="")? "\n" : " "
:Если текущая строка пуста ($0=="")?
, то вывести новую строку "\n"
, иначе вывести пробел " "
. Однако, если вы просто хотите разбить каждую третью строку,
awk '{printf $0; printf (NR%3=="0")? "\n" : " "}' /path/to/file.txt
(NR%3=="0")
:здесь условные тесты, если номер строки NR
по модулю 3
равен нулю. то есть он будет печатать новую строку каждые три строки ввода, иначе просто напечатать пробел. Попробуйте это,
cdd(){
depth=$(pwd | tr -dc '/' | wc -c)
for ((d=0;d<=depth;d++)); do
[ $d -eq 0 ] && search_dir="." || search_dir=$(printf '../%.0s' $(seq 1 $d))
res=( )
while IFS= read -r -d '' item; do
res+=( "$item" )
done < <(find $search_dir -mindepth 1 -maxdepth 1 -type d -name "$1" -print0)
if [ ${#res[@]} -eq 0 ]; then
continue
elif [ ${#res[@]} -eq 1 ]; then
t="$res"
elif [ ${#res[@]} -gt 1 ]; then
select t in "${res[@]}"; do
break
done
fi
echo "$t"
cd "$t" && return || { echo "Unknown Error"; return; }
done
echo "Not found"
}
Для каждого цикла он будет искать еще одну папку вверх по дереву, пока не будет достигнута $depth
, что эквивалентно корневой папке /
.
Использование:cdd targetname
Пример:
$ cdd home
../../../home
Если найдено несколько каталогов, появится меню select
.
$ cdd "D*"
1)../Documents
2)../Downloads
3)../Desktop
#? 2
../Downloads