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

时间:2018-02-02 07:04:08

标签: awk

所以,是的,我试图将包含电子邮件的file1与发送电子邮件冒号地址的file2相匹配,我该如何继续进行呢?

尝试了awk 'FNR==NR{a[$1]=$0; next}{print a[$1] $0}',但是我犯了什么错误

文件1:

email@email.email
email@test.test
test@email.email

file2的:

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

输出:

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

3 个答案:

答案 0 :(得分:1)

关注awk可能对您有帮助。

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

答案 1 :(得分:1)

$ join -t: <(sort file1) <(sort file2) email@email.email:addressotest test@email.email:addresso2 预先输入文件

h=$(echo "$g" | sed 's/.*\(abc[[:digit:]]\).*/\1/g')    
if [ ! "$h" = "$g" ]; then    
  echo "1"   
else    
  echo "2"    
fi

答案 2 :(得分:0)

当您只需使用以下awk命令时,为什么选择join解决方案:

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 

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

取决于您要排序的列(最终添加-r选项以按相反顺序排序。

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

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