![将文件中的一行与其后续行进行比较](https://linux22.com/image/73015/%E5%B0%86%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E4%B8%80%E8%A1%8C%E4%B8%8E%E5%85%B6%E5%90%8E%E7%BB%AD%E8%A1%8C%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
假设我有一个名为示例.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)