linux – 如何使用fortran或shell在同一文件中突出显示其右侧的不匹配数据?

经过很多努力,我找不到任何合适的命令来满足我的要求.我有两个不同的数据文件,一列但长度不等.我的两个文件的一部分是:

file1.dat   file2.dat
 23.99       23.99
 45.950      45.951
 5           6
 23          23
             43
             34

我希望在相同的文件中突出显示最多2个小数点的不匹配数据,如下所示:

file1.dat                   
 23.99               
 45.950              
 5        not present
 23                  

file2.dat
 23.99
 45.951
 6        not present
 23       
 43       not present
 34       not present

解决方法:

我做了简单的脚本,它可以帮助您或其他
首先我们将file1.dat和file2.dat结合起来并输出到名为output.dat的文件中,两列似乎是这样的

|23.99 : 23.99|
|45.950 : 45.951|
|5 : 6|
|23 : 23|
| : 43|
| : 34|

用awk粘贴

:|paste -d ' :  ' file1.dat - file2.dat > output.dat | awk -F '|' '{print "|" $1 "|" $8}' output.dat

然后用两个带有突出显示箭头的列进行比较

awk -F : '{if(!($1==$2))printf("%s", "'$RED'=>'$NORMAL'not");print" matched ",$0}'  output.dat

突出显示箭头的颜色

RED=`echo -e '\033[41m\033[37m'`
NORMAL=`echo -e '\033[0m'`

结果将是这样的

 present  23.99 :23.99
=>not present  45.950 :45.951
=>not present  5 :6
 present  23 :23
=>not present   :43
=>not present   :34

完整脚本:

#!/bin/bash
RED=`echo -e '\033[41m\033[37m'`
NORMAL=`echo -e '\033[0m'`


:|paste -d ' :  ' file1.dat - file2.dat > output.dat | awk -F '|' '{print "|" $1 "|" $6}' | awk -F : '{if(!($1==$2))printf("%s", "'$RED'=>'$NORMAL'not");print" present ",$0}'  output.dat
上一篇:python – 如何在这个短代码中提高numpy性能?


下一篇:使用OpenMPI从Fortran调用C语言