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

如何在Bash中提取两文件共同:name的首次出现及对应行

问题解决:提取文件中共同名称的首次出现内容

现有两个输入文件,需提取两文件中共同的:name条目及其下方的./name/of/file行,但仅保留file1中每个:name的首次出现。此前使用的Awk命令会输出重复的:name条目(如:name1和:name4的所有出现),不符合需求。

修改后的Awk命令

awk 'FNR==NR { a[$1]; next }
/^[[:space:]]*:name/ {
    curr_name = $0
    gsub(/^[[:space:]]/, "", curr_name)
    if (curr_name in a && !seen[curr_name]) {
        seen[curr_name] = 1
        print curr_name
        flag = 1
    } else {
        flag = 0
    }
    next
}
flag { print "    " $0 }' file2 file1

命令逻辑说明

  • 首先处理file2,将所有:name条目存入数组a,作为需要匹配的目标集合
  • 处理file1时:
    • 识别以:name开头的行(允许行首有空格),去除行首空格后得到标准化的名称curr_name
    • 若该名称在目标集合中且未被处理过(通过seen数组标记是否已提取首次出现),则打印名称,开启输出标记flag,并标记该名称为已处理
    • 若名称不在目标集合或已被处理过,则关闭输出标记
  • 当输出标记flag为开启状态时,给对应的./name/of/file行添加缩进后打印

输入文件示例

file1

:name1
./name/of/file [logfile] [ error in file coming since Day : 1 ]
./name/of/file [logfile] [ error in file coming since Day : 1 ]

:name2
./name/of/file [logfile] [ error in file coming since Day : 1 ]

:name3
./name/of/file [logfile] [ error in file coming since Day : 24 ]
./name/of/file [logfile] [ error in file coming since Day : 24 ]

 :name1
./name/of/file [logfile] [ error in file coming since Day : 40]
./name/of/file [logfile] [ error in file coming since Day : 40 ]

:name4
./name/of/file [logfile] [ error in file coming since Day : 3 ]
./name/of/file [logfile] [ error in file coming since Day : 3 ]
./name/of/file [logfile] [ error in file coming since Day : 3 ]
./name/of/file [logfile] [ error in file coming since Day : 3 ]

:name5
./name/of/file [logfile] [ error in file coming since Day : 6 ]
./name/of/file [logfile] [ error in file coming since Day : 6 ]

:name4
./name/of/file [logfile] [ error in file coming since Day : 10 ]
./name/of/file [logfile] [ error in file coming since Day : 10 ]
./name/of/file [logfile] [ error in file coming since Day : 10 ]
./name/of/file [logfile] [ error in file coming since Day : 10 ]  

file2

:name1
:name3
:name4

期望输出

:name1
    ./name/of/file [logfile] [ error in file coming since Day : 1 ]
    ./name/of/file [logfile] [ error in file coming since Day : 1 ]
:name3
    ./name/of/file [logfile] [ error in file coming since Day : 24 ]
    ./name/of/file [logfile] [ error in file coming since Day : 24 ]
:name4
    ./name/of/file [logfile] [ error in file coming since Day : 3 ]
    ./name/of/file [logfile] [ error in file coming since Day : 3 ]
    ./name/of/file [logfile] [ error in file coming since Day : 3 ]
    ./name/of/file [logfile] [ error in file coming since Day : 3 ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:05:24