中野智文

中野智文(VOYAGE GROUP)のコンピュータなどのメモ

cutコマンドのフィールドの順序

2014-07-08 19:07:48 | ruby

背景

使わない人は滅多に使わないcutコマンドだが、cut -f1,2,3,5 みたいにフィールドを指定するだけで、便利に使える。 だがとても残念なことに、フィールドの順序は決められない。例えば、cut -f5,3,2,1としても、cut -f1,2,3,5として扱われる。

対処方法

結論からすると、cut コマンドでフィールドの順序を変える方法はない。

rubyのワンライナー

くそっということで、rubyのワンライナー。
% ruby -ane 'puts [5,3,2,1].map{|i|$F[i-1]}.join("\t")'
ちょっと長いが、スピードはcutより若干早いので、我慢。

追記

2014/07/09 修正:

cut のフィールド指定は、1-originであるのに対して、ruby -a の $Fは、0-originであることを失念。-1を追加修正。

2014/07/14 修正

cut のデフォルトのデリミタはTABに対し、ruby -a は、「空白文字の連続」らしいので、全く同じにするには、デリミタをTABする必要がある。
% ruby -F"_____" -ane 'puts [5,3,2,1].map{|i|$F[i-1]}.join("\t")'
_____は、Ctrl+v TABで入力。 または、
% ruby -ane 'BEGIN{$;=$,="\t"};puts [5,3,2,1].map{|i|$F[i-1]}.join'
だんだん長くなってきた…

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。