在bash中,我试图编写一个简短的一行代码,将一个文件的行计数除以另一个文件的行计数。我想从浮点除法中至少显示两位小数.
换句话说,我希望一行打印一个文件的另一个行计数的百分比。
例如,如果第一个文件(first.txt)有25行,第二个文件(second.txt)有100行,那么一行将输出.25
。
发布于 2017-09-26 13:32:23
首先是一些测试材料:
$ for i in {1..25} ; do echo $i >> first ; done
$ for i in {1..100} ; do echo $i >> second ; done
然后是一些awk:
$ awk 'END{print(NR-FNR)/FNR}' first second
0.25
NR
是两个文件中记录的总数。在END
FNR
是后一个文件中的记录数,因此(NR-FNR)/FNR
是第一个文件的记录计数除以第二个文件的记录计数。
除了这里提供的解决方案之外,您还需要将您的问题带到the code golf course。
发布于 2017-09-26 13:05:55
我能想到的最短的方法是使用命令替换和重定向
$ echo "scale=2; $(wc -l <first.txt) / $(wc -l <second.txt)" | bc
.25
如果你有问题请告诉我。
发布于 2017-09-26 13:05:01
或者,您可以将gawk
用作:
gawk 'NR==FNR{a+=1;next} {b+=1} END{printf "%.2f\n", a/b}' first.txt second.txt
https://stackoverflow.com/questions/46435762
复制