linux - 如何将两个文本文件与第一列进行比较,如果匹配,则打印相同的内容,如果不匹配,则置零?

标签 linux shell join awk sed

1.txt包含

1  
2  
3  
4  
5  
.  
.  
180    

2.txt包含

3  0.5  
4  0.8  
9  9.0  
120  3.0  
179  2.0  

所以我希望我的输出类似于如果 2.txt 与 1.txt 的第一列匹配,那么应该打印 2.txt 中第二列的值。如果不匹配则应打印零。

类似的输出应该是:

1  0.0  
2  0.0  
3  0.5  
4  0.8  
5  0.0  
.  
.  
8 0.0  
9 9.0
10 0.0  
11 0.0  
.  
.  
.  
120 3.0  
121 0.0  
.  
.  
150 0.0  
.  
179 2.0  
180 0.0  

最佳答案

awk 'NR==FNR{a[$1]=$2;next}{if($1 in a){print $1,a[$1]}else{print $1,"0.0"}}' 2.txt 1.txt

简要说明,

  1. NR==FNR{a[$1]=$2;next:将2.txt的$1记录到数组a
  2. 如果 1.txt 中的 $1 存在于数组 a 中,则打印 a[$1],否则打印 0.0

关于linux - 如何将两个文本文件与第一列进行比较,如果匹配,则打印相同的内容,如果不匹配,则置零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51373284/

相关文章:

linux - 如何将字符串附加到 bash 变量以返回另一个变量的值?

linux - 日志文件中 2 个日期之间的 Bash Grep 行

sql - 使用 alter session 从 Linux 命令行运行 Oracle SQL 脚本

linux - 如何使用 python 3.x 运行程序

python - 使用 Peewee 对连接表进行计数

mysql - 如何通过几个条件来计算测距?

linux - shell bash 脚本 - 上传一个大的 tar 文件,重试?

linux - 将多行的输出列分配给不同的变量?

linux - 如何在 unix 中一次授予 777 多个目录的权限?

sql-server - 将相关表中的总和分组到 linq 查询列中