繁体   English   中英

Bash Awk,记录的相反顺序

[英]Bash Awk, Reverse order of records

大家好,我正在制作awk bash脚本,它将使用输入文本文件,例如:

1111 Joe Brown
2222 Charlie Rogers
3333 Chris Williams
4444 Rob Black

并简单地反转行的顺序,因此输出将是:

4444 Rob Black
3333 Chris Williams
2222 Charlie Rogers
1111 Joe Brown

我收到语法错误,说“(”附近有一个错误,并且我还有一个额外的“ {”,我无法弄清楚这里发生的是我的代码:

#!/bin/bash
awk '{a[NR]=$0} END (for(i=NR; i>=1; i--)) printf("%s\n",a[i])}'

如果是unix,则可以使用tac

您可能只使用sort(1)命令。

sort -nr < input.txt

排序简单地将输入文件作为文件并尝试对其进行排序,并以空格作为分隔符(这是我们的情况),因此它按第一列对输入进行排序。 如果需要第一列的非字母排序,则需要-n开关(以数字方式排序)。 -r开关仅反转输出(升/降)。

那里有两个额外的括号。 更正它:

awk '{a[NR]=$0} END {for(i=NR; i>=1; i--) printf("%s\n",a[i]);}' file

如果您不必使用awk ,则可以轻松完成以下操作: tac file

这是awk变体:

awk '{a[i++]=$0} END {while(i--) print a[i]}' file
4444 Rob Black
3333 Chris Williams
2222 Charlie Rogers
1111 Joe Brown

perl解决方案:

$ perl -e 'print reverse <>' file
4444 Rob Black
3333 Chris Williams
2222 Charlie Rogers
1111 Joe Brown

sed

$ sed '1!G;h;$!d' file
4444 Rob Black
3333 Chris Williams
2222 Charlie Rogers
1111 Joe Brown

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM