最初のフィールドを取得して計算する方法 および シェルの浮動小数点数を丸める方法 のわずかな変化に苦労しています。
(列間のスペース)のようなファイルがあります:
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]
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
_はデフォルトの印刷をアクティブにします。
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
Shellで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を結合します。