テキストテーブルに与えられたデータを入力するために単純な数式を適用する必要があることがよくあります。
最初は、ユースケースごとに特定の小さな関数を作成しました。その後、「汎用コード」を 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) 2乗に置き換えます。"
$ ls -l | calcc 4 '$7*$7'
もっと良い方法や今まで見ていない(POSIX)ツールはありますか?
$1..$n
編集:@RalphRönnquistは書くことができるので、より短いバージョンが提案されるかもしれないと指摘しました。これはprint
デフォルトawk
の動作なので、より短縮できます。 ==>
$ calcc() { awk "\$$1=$2" | column -t; }
$ calcc-nc() { awk "\$999=$1" | column -t; }
2番目の関数はNよく氏最後に計算結果をリストします。
答え1
awk
これは素晴らしいですが、次のようにすればより簡単に実行できます。
calcc() {
awk "{\$$1=$2;print}" | column -t
}
これが良いかどうかはあなたの選択です。