ファイルに行番号を付けて表示したい
行番号を付けてテキストを表示したいと思った!
特に意味はない。思いついただけ・・・
で調べてみると・・・
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 との差別化を図るために、行番号とのセパレータを"|"にしてみたよ!
コメント
コメントを投稿