Text-Processing

如何使用awk按降序添加帶有序列號的行

  • September 22, 2022

目前我正在使用awk '{print NR,$0}' 此命令列印文件的序列號。但是如何按降序列印序列號?

電流輸出:

1 abcd
2 abcd
3 abcd
4 abcd

期望的輸出:

4 abcd
3 abcd
2 abcd
1 abcd

不使用awk而是使用可以讓您避免編寫自己的(更詳細的)腳本的工具。

使用非標準tac實用程序以相反的順序輸出文件的行,並cat使用其非標準-n選項對行進行編號:

tac file | cat -n | tac

為了避免緩衝,雙通道方法可能對大文件有益。它使用標準工具和語法,因此應該是相當可移植的。

awk 'NR==FNR{next} {printf "%d %s\n",(NR-2*FNR+1),$0}' input_file input_file

這將處理文件兩次(因此它被兩次作為參數給出):

  • 在第一遍中FNR,每個文件的行計數器NR與全域行計數器相同,我們什麼都不做(=立即跳過執行到該next行),只是讓行計數器自動遞增。
  • 在第二遍(FNR現在不同於NR)中,我們將逆行數計算為NR(處理的總行數,即輸入文件中的總行數加上目前行數)減去 2 倍FNR(一次以將其減少到文件長度, 和另一次實際倒計時), 加 1 (否則我們最終會0得到最後一行的行號), 並用於printf將其添加到行前。

引用自:https://unix.stackexchange.com/questions/718224