如何使用Awk比较文件中的列并新增存储最小值的列?
一行Awk解决新增最小值列的需求
当然有更简洁高效的Awk方案啦!你的需求完全不需要拆分成多个脚本再合并,一行命令就能搞定:
awk '{print $0, (NR==1 ? "smallest" : ($2 < $3 ? $2 : $3))}' test.txt
命令细节解释:
$0:输出当前行的全部原有内容,完美保留原格式NR==1:判断是否是表头行(第一行),如果是就追加列名smallest($2 < $3 ? $2 : $3):对数据行直接比较第2列(col1)和第3列(col2)的值,输出更小的那个(这是Awk里的三元运算符,相当于简化版的if-else判断)
实际测试效果
你的输入文件test.txt内容:
label col1 col2 A 0.999966 0.618701
运行命令后,输出结果正好符合你的期望:
label col1 col2 smallest A 0.999966 0.618701 0.618701
对比你原来的方法
你之前拆分文件再合并的方式不仅步骤繁琐,还会打乱多行数据的原有顺序,同时也没处理表头的新增列名需求。这个一行Awk命令一次性解决了所有问题,更高效也更易维护。
内容的提问来源于stack exchange,提问作者star
相关产品推荐
相关产品推荐

