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