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