gpt4 book ai didi

bash - 根据 bash 前后的行处理一行

转载 作者:行者123 更新时间:2023-11-29 09:46:28 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何编写一个 bash 脚本,该脚本使用紧接在行前后的行作为条件。我将在类似 python 的伪代码中给出一个对我有意义的示例。

基本上:

for line in FILE:
if line_minus_1 == line_plus_one:
line = line_minus_1

执行此操作的最佳方法是什么?

所以如果我有一个输入文件:

3
1
1
1
2
2
1
2
1
1
1
2
2
1
2

我的输出是:

3
1
1
1
2
2
2
2
1
1
1
2
2
2
2

请注意,它从第一行开始到最后一行,并且尊重前面几行所做的更改,所以如果我有:

2
1
2
1
2
2

我会得到:

2
2
2
2
2
2

而不是:

2
1
1
1
2
2

最佳答案

$ awk 'minus2==$0{minus1=$0} NR>1{print minus1} {minus2=minus1; minus1=$0} END{print minus1}' file
3
1
1
1
2
2
2
2
1
1
1
2
2
2
2

工作原理

  • minus2==$0{minus1=$0}

    如果 2 行前的行与当前行相同,则将 1 行前的行设置为等于当前行。

  • NR>1{print minus1}

    如果我们超过了第一行,则打印从 1 行之前开始的行。

  • minus2=minus1; minus1=$0

    更新变量。

  • END{print minus1}

    我们读完文件后,打印最后一行。

多行版本

对于那些喜欢将代码分布在多行中的人:

awk '
minus2==$0{
minus1=$0
}

NR>1{
print minus1
}

{
minus2=minus1
minus1=$0
}

END{
print minus1
}
' file

关于bash - 根据 bash 前后的行处理一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com