簡體   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