需要帮助逃避bash脚本中的awk引用

时间:2016-10-01 02:21:19

标签: bash awk watch

我的bashrc文件中有一个别名,它输出当前文件夹内容和系统可用存储空间,由watch函数连续更新。

alias wtch='watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| head -2 | awk '{print \$4}'"'

字符串工作正常,直到我放入awk部分。我知道我需要逃避单引号,同时仍然保持双引号和4美元,但我无法让它工作。我做错了什么?

这是我得到的错误

-bash: alias: $4}": not found

2 个答案:

答案 0 :(得分:4)

由于别名的引用使其变得困难,所以你可以改为使用它:

wtch() {
    watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| head -2 | awk '{print $4}'"
}

这与BashFAQ/050

中的问题2非常相似

此外,还有一件小事,但您可以在最后跳过head进程,只需awk执行此操作,甚至可以在第二行之后退出

wtch() {
    watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| awk '{print $4} NR >= 3 {exit}'"
}

答案 1 :(得分:2)

在这种情况下,您可以使用cut代替awk。而且你会产生同样的效果。

alias wtch="watch -n 0 -t 'du -sch * -B 1000000 2>/dev/null | sort -h && 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