如何从awk中的文件中获取最后10个值

如何从awk中的文件中获取最后10个值,awk,sed,Awk,Sed,我有一个包含以下数据的文件: 345 234 232 454 343 676 887 324 342 355 657 786 343 879 088 342 121 345 534 657 767 我需要剪切最后10个值并将其放入另一个文件: 786 343 879 388 342 121 345 534 657 767 无需使用awk,只需跟踪数据即可: tail -n 10 input.txt > example.txt 如果您真的想使用awk,您必须跟踪最后10行($0),并在

我有一个包含以下数据的文件:

345
234
232
454
343
676
887
324
342
355
657
786
343
879
088
342
121
345
534
657
767
我需要剪切最后10个值并将其放入另一个文件:

786
343
879
388
342
121
345
534
657
767

无需使用awk,只需跟踪数据即可:

tail -n 10 input.txt > example.txt

如果您真的想使用awk,您必须跟踪最后10行(
$0
),并在
END
中打印它们。虽然这样做会有点过分。

这就是
tail
命令的作用:

$ tail -10 file
786
343
879
088
342
121
345
534
657
767
要将输出存储在新文件中,请使用重定向操作符:

$ tail -10 file > new_file
$ awk '{a[NR]=$0}END{for(i=(NR-9);i<=NR;i++)print a[i]}' file > new_file
但是,如果您确实想使用
awk
执行此操作,则蛮力方法是将每一行存储在一个数组中,并在文件末尾打印最后10个元素:

$ awk '{a[NR]=$0}END{for(i=(NR-9);i<=NR;i++)print a[i]}' file
786
343
879
088
342
121
345
534
657
767
GNU代码:

  • 获取最后10行

    sed”:a$q;N11美元,D;ba'文件
    
  • 除了最后10行之外,其他的都要

    sed”:a$d;N2,10ba;PD'文件
    

您的awk版本仍在使用tail@MatthiasVallentin+1用于为作业建议正确的工具,但由于它是最后一行
10
,我们可以避免声明
-n10
,因为这是
tail的默认行为。@JS웃 (加上其他4名投票人)我不是建议了适合这项工作的工具,并回答了问题吗?@sudo_O我想是的。虽然我觉得整个
awk
部分其实并不必要。@JS웃 问题是如何使用
awk
awk
零件怎么可能是不必要的!?POSIX要求将
tail-n10
置于传统的
tail-10
IIRC之上。可能是这样,但我不记得曾经使用过需要它的
tail
。我想加入
-n
就是认为@Matthias Vallentin价值+5的原因,尽管他实际上并没有回答这个问题。+1是为了回答问题并提供更好的选择。有时我想知道人们是如何投票给第二个最好的答案而忽略了最好的答案的。
$ awk '{a[NR%10]=$0}END{for(i=NR%10+1;j++<10;i=++i%10) print a[i]}' file 
786
343
879
088
342
121
345
534
657
767
$ awk '{a[NR%n]=$0}END{for(i=NR%n+1;j++<n;i=++i%n) print a[i]}' n=3 file 
534
657
767