Text-Processing

從文件中列印行範圍,並包含行號

  • August 18, 2020

我有一個sedoneliner,可以從文件中列印行範圍:

sed -n '10,20p' file.txt

以上將列印 file.txt 中的第 10 到 20 行。

但是我怎樣才能列印行號?

嘗試awk

awk 'FNR==10,FNR==20 {print FNR ":" $0}' file.txt

這將列印行號、冒號,然後是第 10 到 20 行範圍內的行。

或者在第 20 行之後停止閱讀:

awk 'FNR >= 10 {print FNR ":" $0}; FNR == 20 {exit}' file.txt

如果處理多個文件並且您的awk實現支持該nextfile指令:

awk -v OFS=: 'FNR >= 10 {print FILENAME, FNR, $0}; FNR == 20 {nextfile}' ./*.txt

(這裡也列印目前文件名)。

sed=列印行號的命令。

sed -n '10,20{=;p}' file.txt

但是,它將行號列印在實際行上方的單獨行中。

如果要在實際行的同一行中將行號放在行號之前,可以通過管道nl傳遞到sed,

nl file.txt | sed -n '10,20p'

您可能需要設置一些nl標誌以使輸出更好。我將其別名為alias nl='nl -b a -n rz -s "|" -w1',以便用作|數字和行之間的分隔符、右對齊數字等。

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