Bashで数字を数えて丸めます。

Bashで数字を数えて丸めます。

ちょっとした変化で苦労しています。 最初のフィールドを取得して計算する方法そしてシェルで浮動小数点数を丸める方法は?

(列間のスペース)などのファイルがあります。

1533 C_P.doc
691 C_M.doc
905 G_S.doc
945 J_Z.doc
1549 J_M.doc
1701 L_B.doc

数値列を取得し、各数値を65で除算し(丸め)、その数値を含む新しい列を追加したい(可能な限り左側)。つまり

24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
27 1701 L_B.doc

bashスクリプトでこれを実行したいと思います。可能ですか?必要に応じて中間ポストを削除できます(簡単に削除できる場合)。

[Ubuntu 14.04]

答え1

awk中間列を渡して維持します。

awk '{printf("%.f ", ($1/65)+0.5)}1' infile > outfile
24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
27 1701 L_B.doc

合格awkと不合格のニューラルポール:

awk '{printf("%.f", ($1/65)+0.5); $1=""}1' infile > outfile
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc

は関数を置き換える+0.5ために使用され、次の数字に丸められます。ceil()最後に、1基本印刷を有効にします。

答え2

あなたはそれを使用することができますperl

$ perl -MPOSIX=ceil -anle '$F[0] = ceil($F[0]/65);print "@F"' file
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc

答え3

pythonシェルで使用し、これがa.txtあなたのファイルであると仮定するのが気に入らない場合は、次のようにします。

[sreeraj@server ~]$ cat a.txt
1533 C_P.doc
691 C_M.doc
905 G_S.doc
945 J_Z.doc
1549 J_M.doc
1701 L_B.doc
[sreeraj@server ~]$ for i in $(awk -v c=65 '{ print $1/c }' a.txt) ; do python -c 'print int(round('$i',0))' ; done >> b.txt
[sreeraj@server ~]$ paste b.txt a.txt > c.txt
[sreeraj@server ~]$ cat c.txt
24      1533 C_P.doc
11      691 C_M.doc
14      905 G_S.doc
15      945 J_Z.doc
24      1549 J_M.doc
26      1701 L_B.doc
[sreeraj@server ~]$

これにより、目的の出力を含むc.txtファイルが生成されます。

仕組み:

awka.txtの最初の列の値を65で除算し、組み込みpython関数を使用してround()小数点を丸めます。次に、「for」ループの出力を使用してc.txtファイルを生成し、それを使用してpastec.txtとa.txtを結合します。

関連情報