Text-Processing
如何使用awk按降序添加帶有序列號的行
目前我正在使用
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
將其添加到行前。