Skip to content

Instantly share code, notes, and snippets.

@cipepser
Created January 28, 2017 06:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cipepser/930b77e110065c0d74170d39dd9e1e85 to your computer and use it in GitHub Desktop.
Save cipepser/930b77e110065c0d74170d39dd9e1e85 to your computer and use it in GitHub Desktop.
package main
import (
"os"
"bufio"
"log"
"strconv"
"path/filepath"
)
const (
NULL rune = 0
)
func main() {
// read file
rfp, err := os.Open(os.Args[1])
if err != nil {
log.Fatal(err)
}
defer rfp.Close()
reader := bufio.NewReaderSize(rfp, 4096)
// 抜き出したい列
col, err := strconv.Atoi(os.Args[2])
if err != nil {
log.Fatal(err)
}
// write file
dir, _ := filepath.Split(os.Args[1])
filename := dir + "col" + strconv.Itoa(col) + ".txt"
wfp, err := os.Create(filename)
if err != nil {
log.Fatal(err)
}
defer wfp.Close()
var count int = 1
var word []rune
for {
p, _, _ := reader.ReadRune()
// ファイル終端ならループを抜ける
if p == NULL {
break
}
if p == rune('\t') {
count++
} else if count == col {
word = append(word, p)
}
if p == rune('\n') {
wfp.Write([]byte(string(word)))
wfp.Write([]byte(string('\n')))
count = 1
word = nil
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment