[英]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.