我的表格看起来像这样:
ERR843978.746 15 54 71
ERR843978.1705 7 45 51
ERR843978.5030 3 46 58
ERR843978.8855 15 48 52
ERR843978.4162 16 48 64
ERR843978.421 14 51 54
ERR843978.4599 12 60 46
ERR843978.5941 18 67 55
ERR843978.3780 15 56 70
我希望将所有列预期第一个列相同的数字,例如如果我除以3得到这种输出,例如:
ERR843978.746 3 18 23.666
ERR843978.1705 2.333 15 17
ERR843978.5030 1 15.333 19.333
ERR843978.8855 5 19.333 17.333
...
这听起来并不太难但我无法想出用bash做到这一点的方法(我猜你也可以用Python轻松做到这一点)。
我需要一个不太慢的解决方案,因为我的桌子实际上非常大。
答案 0 :(得分:2)
在awk中:
$ awk '{for(i=2;i<=NF;i++)$i/=3}1' file
ERR843978.746 5 18 23.6667
ERR843978.1705 2.33333 15 17
ERR843978.5030 1 15.3333 19.3333
ERR843978.8855 5 16 17.3333
ERR843978.4162 5.33333 16 21.3333
ERR843978.421 4.66667 17 18
ERR843978.4599 4 20 15.3333
将其传输到column
以获取nices输出:
$ awk ... | column -t
ERR843978.746 5 18 23.6667
ERR843978.1705 2.33333 15 17
ERR843978.5030 1 15.3333 19.3333
答案 1 :(得分:2)
关注awk
可能对您有帮助。
awk '{for(i=2;i<=NF;i++){$i=$i/3}} 1' Input_file
答案 2 :(得分:1)
Perl解决方案:
perl -ane '$_ /= 3 for @F[1..$#F]; print "@F\n"' -- file
-n
逐行读取输入行-a
拆分空格上的每一行并填充@F数组$_ /= 3
是$_ = $_ / 3