gpt4 book ai didi

awk - 使用 sed 或 awk 删除倒数第三行文件

转载 作者:行者123 更新时间:2023-12-02 11:26:02 30 4
gpt4 key购买 nike

我有几个具有不同行号的文本文件,我必须在所有这些文件中删除倒数第三行。这是一个示例文件:

bear
horse
window
potato
berry
cup
此文件的预期结果:
bear
horse
window
berry
cup
我们可以删除文件的倒数第三行吗:
一种。不基于任何字符串/模式。
湾仅基于它必须是倒数第三行的条件
我对如何从最后一行开始索引我的文件有疑问。我已经从倒数第二行的另一个 SO 问题中尝试过这个:
> sed -i 'N;$!P;D' output1.txt

最佳答案

tac + awk解决方案,请您尝试以下操作。刚设置line awk 的变量到你想跳过的行(从底部)。

tac Input_file | awk -v line="3" 'line==FNR{next} 1' | tac
说明:使用 tac将读取 Input_file 反向(从底行到第一行),将其输出传递给 awk命令,然后检查条件是否 line 等于 line(我们要跳过)然后不打印该行,1 将打印其他行。
第二种解决方案:awk + wc解决方案,请尝试以下操作。
awk -v lines="$(wc -l < Input_file)" -v skipLine="3" 'FNR!=(lines-skipLine+1)' Input_file
说明:开始 awk在这里编程并创建一个变量 lines其中包含 Input_file 中存在的总行数。变量 skipLine有我们想要从 Input_file 底部跳过的行号。然后在主程序检查条件,如果当前行不等于 lines-skipLine+1然后打印线条。
第三种解决方案:根据 Ed sir 的评论在此处添加解决方案。
awk -v line=3 '{a[NR]=$0} END{for (i=1;i<=NR;i++) if (i != (NR-line)) print a[i]}' Input_file
说明:为第三个解决方案添加详细说明。
awk -v line=3 '             ##Starting awk program from here, setting awk variable line to 3(line which OP wants to skip from bottom)
{
a[NR]=$0 ##Creating array a with index of NR and value is current line.
}
END{ ##Starting END block of this program from here.
for(i=1;i<=NR;i++){ ##Starting for loop till value of NR here.
if(i != (NR-line)){ ##Checking condition if i is NOT equal to NR-line then do following.
print a[i] ##Printing a with index i here.
}
}
}
' Input_file ##Mentioning Input_file name here.

关于awk - 使用 sed 或 awk 删除倒数第三行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64046478/

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