Go言語で、Unixのcat -n
コマンドのように、標準入力より入力されたテキストに行番号をつけるプログラムです。
ファイルから1行づつテキストを読み込むにはbufio.NewScanner()を使うと便利です。また、標準入出力はio.Stdin, io.Stdout, io.Stderrを利用します。
プログラム
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// 標準入力から受け取ったテキストに行番号をつける
line := 0
for scanner.Scan() {
line += 1
fmt.Fprintf(os.Stdout, "%6d %s\n", line, scanner.Text())
}
// エラー処理
if err := scanner.Err(); err != nil {
fmt.Fprintf(os.Stderr, "read error :%v", err)
}
}
実行結果
以下のように、cat -nと同等の処理が行えていることがわかります。
$ more data.txt
hello
world
こんにちは
$ cat -n data.txt
1 hello
2 world
3 こんにちは
$ more data.txt | go run main.go
1 hello
2 world
3 こんにちは
こちらもおススメ