Bash Awk,记录的逆序

时间:2014-03-11 14:33:06

标签: bash awk

嘿大家我正在制作一个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])}'

5 个答案:

答案 0 :(得分:2)

如果是unix机器tac可以使用。

答案 1 :(得分:1)

您可以使用sort(1)命令。

sort -nr < input.txt

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

答案 2 :(得分:1)

你有两个额外的括号。纠正它:

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

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

答案 3 :(得分:1)

以下是awk变体:

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

答案 4 :(得分:0)

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