匹配两个文件的记录

时间:2018-02-16 17:21:57

标签: bash awk

我有一个场景,我必须比较Linux中的两个文件,并将第一个文件的内容保存到输出文件。

第一个文件:

user1      /dir1/dir2/dir3/dir4/file.log

user2      /dir1/dir2/dir3/dir4/file1.log   

第二档

/dir1/dir2/dir3/dir4/file.log: ASCII text

/dir1/dir2/dir3/dir4/file1.log: data

输出

假设在文件路径字符串上进行比较,如果文件类型为数据,则 它应该在输出文件中打印第一个文件内容。

user2      /dir1/dir2/dir3/dir4/file1.log  

我曾尝试使用带有FNR == NR选项的awk,但我不确定它是否取得了正确的结果,因为我是Linux脚本的新手。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

关注awk可能对您有所帮助:

awk '
FNR==NR{
  a[$2]=$1;
  next
}
{
  sub(/:/,"",$1)
}
($1 in a) && ($2=="data"){
  print a[$1], $1
}
' first second

输出如下:

user2 /dir1/dir2/dir3/dir4/file1.log

答案 1 :(得分:1)

awk也应该有效:

awk -F '[[:blank:]]*:[[:blank:]]*' 'FNR==NR{ if ($2=="data") a[$1]; next}
$2 in a' file2 FS='[[:blank:]]*' file1

user2      /dir1/dir2/dir3/dir4/file1.log