file - 打印文件的所有行以及其他文件中的匹配行

标签 file awk grep

我有文件1和文件2。我想打印 file1 的所有行,如果: file1 的第 1 列和第 2 列与 file2 的第 1 列和第 2 列匹配,则: 将该行从 file2 添加到 file1 的行。

File1:
1  30  40  name  info
1  3  2  desc  info
1  3  2  id  info
10  35  45  name  info 

File2: 
20 30 40 numbers  desc
1  3  2  desc name 

Result:
1  30  40  name  info  -
1  3  2  desc  info  desc name 
1  3  2  id  info  desc name 
10  35  45  name  info  -  

我做了这段代码:

awk 'NR==FNR {h[$1,$2]=$0;next}{print h[$1,$2],$0}' file1.txt file2.txt > result.txt

但它只打印匹配的行,而我想要所有行。

最佳答案

这个 awk 一行应该有帮助:

awk '{k=$1 FS $2}
  NR==FNR{a[k]=$4FS$5;next}{printf "%s %s\n", $0, (k in a?a[k]:"-") }' file2 file1

关于file - 打印文件的所有行以及其他文件中的匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943581/

相关文章:

ubuntu - 在 grep 中使用正则表达式元字符

.net - 指定当前用户文件路径的方法

file - VBA:从剪贴板读取文件

bash - 如何将变量传递给awk命令行

awk - 如何使用 awk insert "."在第一列中插入字符串?

bash - grep --include/--exclude 期间 GLOB 中的逻辑或

linux - 使用外部变量

java - 在 Android 上创建临时文件的最佳方法是什么?

awk - 如何将 BASH shell 变量传递到 AWK 语句中

bash - 使用 sed/awk 插入文本中线