Bash 如何删除100行文本文件中每10行中的最后3行?
假设我的文件是Bash 如何删除100行文本文件中每10行中的最后3行?,bash,Bash,假设我的文件是 a b c d e f g h 我 j 我希望我的输出是 a b c d e f g 我的文件有100行长,因此代码必须在每10行代码块中删除最后3行。我尝试使用下面的代码,但无法让它删除一个范围 awk'NR%7=0'文件.txt awk'{if(NR%10
awk'NR%7=0'文件.txt
awk'{if(NR%10<8&&NR%10!=0){print}}file.txt
您需要mod 10以每10跳过一些行,而不是mod 7。awk'{if(NR%10<8&&NR%10!=0){print}}file.txt
您需要mod 10以每10跳过一些行,而不是mod 7。Awk的
NR
变量包含以1
开头的行号NR-1
是以0
开头的行号
NR-1
除以10
的提示对于每个10行块的前7行是0..6
,对于最后三行是7..9
该命令非常简单,如下所示:
awk '(NR - 1) % 10 < 7' file.txt
awk'(NR-1)%10<7'file.txt
Awk的NR
变量包含以1
开头的行号NR-1
是以0
开头的行号
NR-1
除以10
的提示对于每个10行块的前7行是0..6
,对于最后三行是7..9
该命令非常简单,如下所示:
awk '(NR - 1) % 10 < 7' file.txt
awk'(NR-1)%10<7'file.txt
嗯,NR
是当前行号。它从1开始计数(第一行)。现在,使用数学运算编写一个条件,条件为NR
,当行号为“每10行块中最后3行”时,条件为真,否则为假。你怎么写这样的条件?awk和KamilCuk让我感到羞耻,没有用他的好榜样为你提供答案。不过,我给你一个提示,试试这个程序:awk'{print NR%10,$0}'usinggnused
,一行代码:sed'8~10d;9~10d;10~10d'file.txt
嗯,NR
是当前行号。它从1开始计数(第一行)。现在,使用数学运算编写一个条件,条件为NR
,当行号为“每10行块中最后3行”时,条件为真,否则为假。你怎么写这样的条件?awk和KamilCuk让我感到羞耻,没有用他的好榜样为你提供答案。不过,我给你一个提示,试试这个程序:awk'{print NR%10,$0}'usinggnused
,一行代码:sed'8~10d;9~10d;10~10d'file.txt
或者您可以尝试以下方法:awk'NR%10<8&&NR%10>0'file.txt为什么要测试NR%10!=0
?当输入文件为空时,NR=0
、NR=10
、20
、30
…会发生这种情况。在这里测试是没有意义的。@LéaGris,是的,这些线路确实发生了这种情况。(S) 他不想要那些台词。(S) 他希望每10行中的最后3行被删除。这将是第8、9和10行。或者您可以尝试以下操作:awk'NR%10<8&&NR%10>0'文件。txt为什么要测试NR%10!=0
?当输入文件为空时,NR=0
、NR=10
、20
、30
…会发生这种情况。在这里测试是没有意义的。@LéaGris,是的,这些线路确实发生了这种情况。(S) 他不想要那些台词。(S) 他希望每10行中的最后3行被删除。那就是第8、9和10行。为什么不NR%10呢?因为对于第10行,NR
是10
,NR%10
是0
。第10行必须删除,但会显示,因为10%0<8
。第20、30、40行a.s.o.也会发生同样的情况。任何使用提醒的技巧只有在计数从0
开始(或从除法器的倍数开始)时才有效。要使其从0
开始,从所有值中减去第一个值就足够了。如果结果必须包括原始值,则在末尾恢复调整(此处不需要)。为什么不NR%10,因为对于第10行,NR
是10
,而NR%10
是0
。第10行必须删除,但会显示,因为10%0<8
。第20、30、40行a.s.o.也会发生同样的情况。任何使用提醒的技巧只有在计数从0
开始(或从除法器的倍数开始)时才有效。要使其从0
开始,从所有值中减去第一个值就足够了。如果结果必须包括原始值,则在结束时恢复调整(此处不需要)。