将公式应用于输入文件的特定列并按原样传递所有其他列的更好方法

将公式应用于输入文件的特定列并按原样传递所有其他列的更好方法

我经常需要应用简单的公式来输入以文本表格形式给出的数据。

一开始,我为每个用例编写了特定的小函数。然后我将“通用代码”重构为 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; }

第二个函数添加了一个nC将计算结果列到最后。

答案1

awk对此很有好处,但你可以做得更简单,用

calcc() {
    awk "{\$$1=$2;print}" | column -t
}

这是否更好是你的选择。

相关内容