将文件中的一行与其后续行进行比较

将文件中的一行与其后续行进行比较

假设我有一个名为示例.txt其中包含以下格式的数据:

1 John
2 Crema
3 Abraham
1 John

我可以使用以下方式逐行读取文件:

while read p
do
echo $p
done <sample.txt

有什么方法可以将特定行与其后续行进行比较,以便我可以执行多项任务,例如重复消除或模式匹配等?为了完成比较任务,我还需要添加哪些额外内容?

答案1

prev=""
while read p; do
    # compare p with prev somehow
    prev="$p"
done <sample.txt

这允许您比较任意两条直接相邻的线。如果您想比较文件中更远的行,它会变得更加复杂,并且可能不是最好在 shell 中编写(尽管具体细节会根据任务而有所不同)。

答案2

awk '{if (NR==1) STR=$0; if ($0==STR) print NR}' file

在本例中,我使用第 1 行作为比较的基础。将 NR==1 修改为您想要比较的行号。

它将打印与所选行匹配的所有行号,包括所选行。应用于您的示例,它将打印:

1
4

一旦你有了行号,你可以通过 sed 消除它们:

sed -i '4d' file

或者在这些行上执行其他任务(例如,进一步使用 NR=行号的 awk)

相关内容