#bash #awk #watch
#bash #awk #Смотреть
Вопрос:
У меня есть псевдоним в моем файле bashrc, который выводит текущее содержимое папки и доступное системное хранилище, постоянно обновляемое функцией просмотра.
alias wtch='watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h amp;amp; df -h -B 1000000| head -2 | awk '{print $4}'"'
Строка работала нормально, пока я не вставил часть awk. Я знаю, что мне нужно избегать одинарных кавычек, оставаясь при этом в двойных кавычках и $ 4, но я не смог заставить это работать. Что я делаю не так?
Это ошибка, которую я получаю
-bash: alias: $4}": not found
Ответ №1:
Поскольку цитирование псевдонима усложняет задачу, вы могли бы просто сделать его функцией вместо этого:
wtch() {
watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h amp;amp; df -h -B 1000000| head -2 | awk '{print $4}'"
}
Это очень похоже на проблему 2 в BashFAQ / 050
Кроме того, небольшая вещь, но вы можете пропустить head
процесс в конце и просто awk
сделать это, даже выйдя после второй строки, например
wtch() {
watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h amp;amp; df -h -B 1000000| awk '{print $4} NR >= 3 {exit}'"
}
Комментарии:
1. @EdMorton Еще раз спасибо, Эд! Я принял ваше предложение (в основном), как обычно
Ответ №2:
В этом случае вы можете использовать cut
вместо awk
. И у вас будет тот же эффект.
alias wtch="watch -n 0 -t 'du -sch * -B 1000000 2>/dev/null | sort -h amp;amp; df -h -B 1000000| head -2 | cut -d -f4'"
Объяснение cut
:
-d option defines a delimiter
-d means that my delimiter is space
-f selects a column
-f4 gives you the fourth column