7つの浮動小数点値列()を含むテキストファイルがあります。 Perl one-linerを使用して、7th
列のしきい値より大きい値を見つけたいと思います。次に、列の値がしきい値を超える行の、、、、4th
値を置き換えようとします。誰かが私がこれを行う方法を教えてもらえますか?5th
6th
7th
7th
0.00000000
ここに例があります。しきい値が1.00000であるとします。
0.04718683 0.24081557 0.02831210 0.98316791 0.00000000 -0.98446111 1.39132413
0.05662420 0.24081557 0.02831210 -0.00006975 0.00001697 -0.00144172 0.00144350
0.06606157 0.24081557 0.02831210 0.00039672 0.00007192 -0.00001264 0.00040339
0.07549894 0.24081557 0.02831210 0.00087559 0.00010765 -0.00028455 0.00092694
0.08493630 0.24081557 0.02831210 0.00004609 0.00012754 -0.00030319 0.00033214
0.09437367 0.24081557 0.02831210 -0.00038816 0.00008384 0.00011519 0.00041348
最初の行の列の値が7th
しきい値より大きいです1.39132413 > 1.00
。したがって、最初の行を次の行(0の値)に置き換える必要があり、他のすべての行は基準を満たしていないため、変更されていません。
0.04718683 0.24081557 0.02831210 0.00000000 0.00000000 0.00000000 0.00000000
答え1
スペースをまったく同じにする必要がない場合は、次の方法を使用できます。
$ perl -lane 'do{$_=sprintf("%.8f",0) for @F[3..6]} if $F[6]>1; print "@F"' file
0.04718683 0.24081557 0.02831210 0.00000000 0.00000000 0.00000000 0.00000000
0.05662420 0.24081557 0.02831210 -0.00006975 0.00001697 -0.00144172 0.00144350
0.06606157 0.24081557 0.02831210 0.00039672 0.00007192 -0.00001264 0.00040339
0.07549894 0.24081557 0.02831210 0.00087559 0.00010765 -0.00028455 0.00092694
0.08493630 0.24081557 0.02831210 0.00004609 0.00012754 -0.00030319 0.00033214
0.09437367 0.24081557 0.02831210 -0.00038816 0.00008384 0.00011519 0.00041348
特定の行数をスキップするには$.
(現在の行番号)値をテストします。
$ perl -lane 'do{$_=sprintf("%.8f",0) for @F[3..6]} if $F[6]>1 && $.>3; print "@F"' file