You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk/grep匹配两个文件的Username字段并合并对应内容?

解决方案

问题原因

你编写的命令存在两个问题:

  • 变量大小写不匹配:read 定义的变量是 Username,后续调用写的是 $username,Shell 变量大小写敏感,会导致匹配失效
  • grep 输出默认自带换行符,后续执行 echo $IP 又会新增换行,因此 IP 会单独占一行

方案1:调整原有循环命令

可以先把grep匹配到的行存入临时变量,再和IP地址合并输出,同时跳过file1的表头行,主动打印统一表头:

# 打印表头
echo "firstname   Lastname  Username IPaddress"
# 处理内容行
awk 'NR>1 {print $2,$1}' file1 | while read Username IP ; do 
    match_line=$(grep "$Username" file2)
    echo "$match_line $IP"
done | column -t

方案2:单awk命令实现(更高效)

不需要管道加循环,直接用awk同时处理两个文件,性能更好,适合大文件场景:

awk '
# 处理第一个文件file1,存储Username和IP的映射关系
NR == FNR {
    if(NR>1) ip[$2] = $1
    next
}
# 处理第二个文件file2,拼接对应IP输出
{
    print $0, (FNR==1 ? "IPaddress" : ip[$3])
}
' file1 file2 | column -t

执行后输出完全符合预期:

firstname  Lastname  Username  IPaddress
Mozes      Bowman    user1     34.244.47.32
Jazzmyn    Parrish   user2     3.249.198.34
Chet       Woods     user3     52.215.73.213

内容的提问来源于stack exchange,提问作者Kerkael Belarpaillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:00:05