Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

競プロで使うBashテク

スペース -> 改行

  • | xargs -n1
  • | tr ' ' '\n'
  • | tr \ \\n (上のものをエスケープしたもの)

改行 -> スペース

  • | xargs
  • | tr '\n' ' '
  • | tr \\n \

行数カウント

  • | wc -l
  • | awk 'END{print NR}'
  • | awk '$0=NR' | tail -n1

これはwc -lだけで十分ですね

先頭1行だけ取り出す

  • | head -n1
  • | awk 'NR==1'

head -n1はかなり使えるのでよく覚えましょう

先頭1行だけ削除

  • read _ で受け取ってしまう
  • | tail -n +1
  • | sed -e '1d'
  • | awk 'NR!=1'

末尾1行だけ取り出す

  • | tail -n1
  • | sed -e '$p;d'
  • | awk 'END{print $0}'

sedとawkは末尾n行に対応できていないので、tailさえ覚えておけば事足りると思います

末尾1行だけ削除

これはそこそこレアケースな気がする(なぜなら上3つでだいたい事足りるため)

  • | head -n -1
  • | sed -e '$d'

重複をカウント

  • | sort | uniq -c

各行をトリムする

  • | sed -e 's/^\s*//'
  • | sed -e 's/^\s*\|\s*$//'

後ろ側のトリムが必要になることはあまりないです。

ソート関連

  • | sort -n 辞書順ではなく数値とみなして比較
  • | sort -nk1 キー指定
  • | sort -nr 降順

あまり使えないテク

  • echo {A..Z}' 半角のアルファベットを列挙する
  • zsh -c 'echo {A..Z}|tr -d " "' 全角のアルファベットを列挙する。bashはこのブレース展開をしてくれないので、zshで行う
  • ruby -ne 'puts $_.tr("0-9a-zA-Z","0-9a-zA-Z")' Rubyが使えるなら、これで全角→半角変換ができる