我经常需要应用简单的公式来输入以文本表格形式给出的数据。
一开始,我为每个用例编写了特定的小函数。然后我将“通用代码”重构为 bash 函数。这效果很好,但感觉不太理想。
这是我的“旧解决方案”,遍历所有字段,检查/反应:
calcc(){
awkcmd='{for (i=1;i<=NF;i++){if (i==col) printf "%s ",'
awkcmd+="$2"
awkcmd+='; else printf "%s ", $i ;}; print "";}'
awk -v col=$1 "$awkcmd" | column -t
}
人为的用法示例:
“将 -output 中的 groupName (Column4) 替换ls -l
为 dayNumber (Column7) 的平方”
$ ls -l | calcc 4 '$7*$7'
有没有更好的方法,或者到目前为止我没有研究过的(POSIX)工具?
编辑:@RalphRönnquist 指出,它们$1..$n
是可写的,因此可以提出一个更短的版本。由于这print
是默认awk
操作,因此可以进一步缩短。 ==>
$ calcc() { awk "\$$1=$2" | column -t; }
$ calcc-nc() { awk "\$999=$1" | column -t; }
第二个函数添加了一个n呃C将计算结果列到最后。
答案1
awk
对此很有好处,但你可以做得更简单,用
calcc() {
awk "{\$$1=$2;print}" | column -t
}
这是否更好是你的选择。