如何将用户定义的bash函数与管道连接

问题描述

| 从某些时候开始,我真的很喜欢bash功能。让我们考虑一个文件的第n列计算平均值的函数
avg () { awk -v c=\"$2\" \'{n+=$c;m++} END{print n/m,m}\' < \"$1\"; }
是否可以重写它以便从管道读取数据?即在以下功能中使用该功能
cat data.txt | avg
    

解决方法

        
avg () { awk -v c=\"$1\" \'{n+=$c;m++} END{print n/m,m}\'; }
(echo 1 3; echo 2 4; echo 4 6) | avg 2
avg 2 < /tmp/file
如果要保留API:
avg () { (if [ \"x$1\" = \"x-\" ]; then cat; else cat $1; fi) | awk -v c=\"$2\" \'{n+=$c;m++} END{print n/m,m}\'; }
(echo 1 3; echo 2 4; echo 4 6) | avg - 2
avg /tmp/file 2