cutコマンドもどき

を作ってみました。どーもcutコマンドはデフォルトの区切り文字とかオプションの指定方法が好きになれないので…

module Main (main) where

import Cinnamon (readFiles)
import System (getArgs)
import System.IO (stderr, hPutStrLn)

main :: IO ()
main = do
  args <- getArgs
  case args of
    (n : files) -> mapM_ putStrLn . field (read n - 1) =<< readFiles files
    _           -> hPutStrLn stderr "usage: hcut n files..."

field :: Int -> String -> [String]
field n = map (flip (!!) n . words) . lines

実行例:

$ echo "aaa bbb ccc" | ./hcut.exe 1
aaa
$ echo "aaa bbb ccc" | ./hcut.exe 2
bbb