Awk:如何从两个文件输出数据

Awk:如何从两个文件输出数据,awk,Awk,所以,是的,我正在尝试将包含电子邮件的文件1与包含电子邮件冒号地址的文件2进行匹配,我该怎么做呢 已尝试awk'FNR==NR{a[$1]=$0;下一步}{print a[$1]$0}'但我知道我做错了什么 文件1: email@email.email email@test.test test@email.email 文件2: email@email.email:addressotest email@test.club:clubbingson test@email.email:addresso

所以,是的,我正在尝试将包含电子邮件的文件1与包含电子邮件冒号地址的文件2进行匹配,我该怎么做呢

已尝试
awk'FNR==NR{a[$1]=$0;下一步}{print a[$1]$0}'
但我知道我做错了什么

文件1:

email@email.email
email@test.test
test@email.email
文件2:

email@email.email:addressotest
email@test.club:clubbingson
test@email.email:addresso2
输出:

test@email.email:addresso2
email@email.email:addressotest

下面的
awk
可能会在同样的情况下帮助您

awk 'FNR==NR{a[$0];next} ($1 in a)' FILE_1 FS=":" FILE_2

嘿,当您可以简单地使用以下
join
命令时,为什么要选择
awk
解决方案:

join -t':' file 1 file2
其中join(如其名称所示)只是一个文件连接命令,您选择了字段分隔符,通常是要显示的输入列和输出(此处不需要)

测试:

$more file{1,2}
::::::::::::::
file1
::::::::::::::
email@email.email
email@test.test
test@email.email
::::::::::::::
file2
::::::::::::::
email@email.email:addressotest
email@test.club:clubbingson
test@email.email:addresso2

$join -t':' file1 file2
email@email.email:addressotest
test@email.email:addresso2
如果还需要对输出进行排序,请将命令更改为:

join -t':' file 1 file2 | sort -t":" -k1 

根据要排序的列(最终添加
-r
选项以按相反顺序排序)

join -t':' file 1 file2 | sort -t":" -k1 -r


使用预排序输入文件连接

$ join -t: <(sort file1) <(sort file2)

email@email.email:addressotest
test@email.email:addresso2

$join-t:展示你的努力,然后得到答案!我已经尝试了awk'FNR==NR{a[$1]=$0;下一步}{打印一个[$1]$0}'文件1文件2,但没有发布一些预期输出的示例数据。我们不喜欢探索游戏。很抱歉,我添加了数据。你需要为文件2设置字段分隔符。请尝试
awk-F:[你的代码]file1 file2
@JohnnyB,它对我有效,你得到了什么错误?我没有得到任何错误,命令的响应就像没有匹配一样found@JohnnyB,您运行了确切的命令吗?它对我来说很好。我用我提供的示例尝试了它,它是有效的,但当我用实际文件尝试它时,它不起作用。(我拥有的文件是大文件)那么这些文件可能与示例有所不同。这些文件有多大?我已经尝试过了,但我得到了join:file2.txt:4未排序:email@email.email:addressotest join file1.txt:2:未排序:test@email.emailwhat是您的排序标准吗?@JohnnyB我已经编辑了我的答案,请看一看!;-)你必须对输入文件进行排序!
join -t':' file 1 file2 | sort -t":" -k2 -r
$ join -t: <(sort file1) <(sort file2)

email@email.email:addressotest
test@email.email:addresso2