ちょっとした変化で苦労しています。 最初のフィールドを取得して計算する方法そしてシェルで浮動小数点数を丸める方法は?
(列間のスペース)などのファイルがあります。
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ファイルが生成されます。
仕組み:
awk
a.txtの最初の列の値を65で除算し、組み込みpython
関数を使用してround()
小数点を丸めます。次に、「for」ループの出力を使用してc.txtファイルを生成し、それを使用してpaste
c.txtとa.txtを結合します。