ファイルに行番号を付けて表示したい

行番号を付けてテキストを表示したいと思った!
特に意味はない。思いついただけ・・・

で調べてみると・・・
sed コマンドを使って出来るようです。
もっと調べたら、
cat コマンドに -n オプションをつければいいらしい・・・おわり。

で、これでは楽しくないので、車輪の再発明になるが、
sed コマンドを使ってやってみようと思います。

以下のファイルに行番号を付けてみる感じで・・・
内容は気にしないことに。
test.txt
[My favorite video games] * "Super Mario Bros." * "Legend of Zelda" * "Metroid" * "Castlevania" * "ASSASSIN'S CREED" * "Horizon Zero Dawn" * "Horizon Forbidden West" * "Ghost of Tsushima" * "Rise of the Ronin" * "WILD HEARTS"
まずは、sed を使ってみる。   
sedで行番号表示
$ cat test.txt|sed = 1 [My favorite video games] 2 * "Super Mario Bros." 3 * "Legend of Zelda" 4 * "Metroid" 5 * "Castlevania" 6 * "ASSASSIN'S CREED" 7 * "Horizon Zero Dawn" 8 * "Horizon Forbidden West" 9 * "Ghost of Tsushima" 10 * "Rise of the Ronin" 11 * "WILD HEARTS"
確かに表示できる!
でも、行番号で改行されちゃう・・・

なので、sed のサブコマンド N を使いましょう!
N は次の行をパターンスペースに追加する命令です。
現在行の終端は改行文字になるらしい。
なので、まあ、普通に考えるとこうなるはず・・・   

sed "N;s/\n/ /"

これは、次の行を取り込んで改行をスペースに変換するということ。
サブコマンドNを使う
$ cat test.txt|sed =|sed "N;s/\n/ /" 1 [My favorite video games] 2 * "Super Mario Bros." 3 * "Legend of Zelda" 4 * "Metroid" 5 * "Castlevania" 6 * "ASSASSIN'S CREED" 7 * "Horizon Zero Dawn" 8 * "Horizon Forbidden West" 9 * "Ghost of Tsushima" 10 * "Rise of the Ronin" 11 * "WILD HEARTS"
良さげだけど、行番号の桁数が増えるとずれる!!
ここで、printf コマンドが使いたくなるよね!
すると、xargs コマンドも必要じゃん!     
printf と xargs を使う
$ cat test.txt|sed =|xargs -d'\n' -n2 printf "%3s | %s\n" 1 | [My favorite video games] 2 | * "Super Mario Bros." 3 | * "Legend of Zelda" 4 | * "Metroid" 5 | * "Castlevania" 6 | * "ASSASSIN'S CREED" 7 | * "Horizon Zero Dawn" 8 | * "Horizon Forbidden West" 9 | * "Ghost of Tsushima" 10 | * "Rise of the Ronin" 11 | * "WILD HEARTS"
ハイ!できました。
って、サブコマンド N を使わなくなってるし(笑)
cat -n との差別化を図るために、行番号とのセパレータを"|"にしてみたよ!

コメント

このブログの人気の投稿

Pythonのソースファイルの行番号を取得したい

Kubuntu22.04 VirtualBox - 重大なエラー 〜 嘘でした"Document is enpty."なだけ

Raspberry Pi 3 シリアルコンソール&シリアル通信