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

标签 linux shell unix fortran

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

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

关于linux - 如何使用 fortran 或 shell 在同一文件中突出显示其右侧的不匹配数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30423942/

相关文章:

c - 这个例子如何使用 dup 工作?

linux - 如何使用 linux 命令从纯文本文件中删除重复的单词

linux - 为什么我可以删除自己目录下的写保护文件(硬链接(hard link))?

linux - 如何使用回声删除空格

使用 sed 和/或 grep 的正则表达式

android - 不小心删除了Android Sdk,我找不到如何再次下载它(Linux)

c++ - 在 Linux 上从 UART 进行阻塞 read()

linux - Rsync 使用 find 命令,删除原始文件,用符号链接(symbolic link)替换原始文件

linux - bash:一个接一个地处理文件

python - 从 bash 中的 python 函数收集返回值