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