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

如何用AWK提取多文件中共享M模式的匹配行

解决方案

要提取所有文件共有的M模式并汇总各文件对应的计数,你需要基于**M模式($2列)**而非整行进行匹配,同时跟踪每个模式在所有文件中的计数。以下是完整的实现步骤:

1. 先获取目标文件总数

假设你的文件是类似file1.txt、file2.txt这样的命名,先统计总文件数:

total_files=$(ls file*.txt | wc -l)

(如果你的文件命名规则不同,替换file*.txt为实际的文件名匹配规则即可)

2. 使用AWK提取并汇总共有模式

运行以下AWK命令,它会自动收集所有文件共有的M模式,并按文件顺序输出各文件的计数,最后一列是M模式:

awk -v total="$total_files" -F'\t' '
{
    # 保存当前文件中该模式的计数
    counts[$2][ARGIND] = $1
    # 统计该模式出现过的文件数量
    file_count[$2]++
}
END {
    # 遍历所有模式,筛选出在所有文件中都存在的
    for (pattern in file_count) {
        if (file_count[pattern] == total) {
            # 按文件顺序输出每个文件的计数
            for (i=1; i<=total; i++) {
                printf "%s\t", counts[pattern][i]
            }
            # 输出M模式并换行
            print pattern
        }
    }
}' file*.txt

关键说明

  • -F'\t':指定字段分隔符为制表符,确保$1是计数、$2是M模式,正确分割每行内容。
  • ARGIND:AWK内置变量,代表当前处理的文件索引(第一个文件为1,第二个为2,以此类推),用来区分不同文件的计数。
  • 二维数组counts[$2][ARGIND]:存储每个M模式在对应文件中的计数,保证后续能按文件顺序输出。
  • file_count[$2]:统计每个M模式出现在多少个文件中,最后筛选出等于总文件数的模式(即所有文件共有的)。

后续排序

你可以直接将结果通过管道传给sort命令排序:

  • 按第一个文件的计数降序排序:
    awk ... | sort -k1,1nr
    
  • 按M模式字典序排序:
    awk ... | sort -k$(($total_files+1))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:06:05