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

如何用Bash逐行比较文件中每行的第三列内容?

没问题,我来帮你搞定这个需求!要实现逐行对比文件中每行的第三列与下一行第三列,我们可以用两种实用的方式来做——纯Bash循环或者更高效的awk工具,下面给你详细拆解:

先看我们的示例文件

假设我们的目标文件是names.txt,内容如下:

JOHN SMITH SMITH
JIM JOHNSON JOHNSON
JIM SMITH SMITH

方法1:纯Bash循环实现(适合小文件)

这个方法用原生Bash命令就能完成,逻辑直观易懂:先读取第一行的第三列作为基准值,然后从第二行开始逐行读取,对比当前行第三列和基准值,相等就执行你需要的操作,不等就更新基准值。

#!/bin/bash

# 定义要处理的文件路径
target_file="names.txt"

# 读取第一行,忽略前两列,只取第三列作为初始基准值
read -r _ _ prev_column < "$target_file"

# 从第二行开始循环处理每一行
tail -n +2 "$target_file" | while read -r _ _ curr_column; do
    if [ "$curr_column" = "$prev_column" ]; then
        # 这里替换成你需要执行的操作,比如打印提示、写入日志等
        echo "找到连续相等的第三列:$curr_column"
        # 示例:echo "处理行:$curr_column" >> process.log
    else
        # 不相等时,更新基准值为当前行的第三列
        prev_column="$curr_column"
    fi
done

小提示:read -r _ _ prev_column里的_是占位符,用来跳过前两列,只捕获第三列的值;tail -n +2用来从文件第二行开始输出,避免重复处理第一行。


方法2:用awk实现(适合大文件,更高效)

如果你的文件很大,纯Bash循环的速度会比较慢,这时用awk(专门的文本处理工具)会更高效,代码也更简洁:

脚本形式

把下面的代码保存为compare_columns.awk:

#!/usr/bin/awk -f

# 处理第一行,记录第三列作为基准值,然后跳过当前行
NR == 1 { prev_col = $3; next }

# 从第二行开始处理每一行
{
    if ($3 == prev_col) {
        # 这里写你要执行的操作,示例是打印提示
        print "连续相等的第三列:" $3
        # 要是需要调用shell命令,可以用system(),比如:
        # system("echo '处理相等列' >> operation.log")
    }
    # 不管相等与否,都更新基准值为当前行的第三列
    prev_col = $3
}

然后执行脚本:

awk -f compare_columns.awk names.txt

一行命令形式

如果不想写脚本,也可以直接用一行命令搞定:

awk 'NR==1{prev=$3;next} $3==prev{print "连续相等:"$3} {prev=$3}' names.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:31:29