40

私はこのようなことをしたい:

cat abcd.txt | cut -f 2,1 

そして、出力で順序を2にしてから1にしたい。私がテストしているマシン (FreeBSD 6) では、これは発生していません (1,2 の順序で印刷されます)。これを行う方法を教えてもらえますか?

この反転を行うシェル スクリプトをいつでも作成できることはわかっていますが、'cut' コマンド オプションを使用して何かを探しています。

カットを含むcoreutilsのバージョン5.2.1を使用していると思います。

4

2 に答える 2

41

これは を使用して行うことはできませんcut。マニュアルページによると:

選択された入力は、読み取られたのと同じ順序で書き込まれ、1 回だけ書き込まれます。

パッチ適用cut度も提案され ましたが、完全なパッチでさえ拒否されました。

代わりに、次のように を使用して実行できますawk

awk '{print($2,"\t",$1)}' abcd.txt

\tフィールドセパレーターとして使用しているものに置き換えます。

于 2009-06-24T09:10:01.423 に答える
21

Larsの答えは素晴らしかったですが、さらに良い答えを見つけました。彼の問題は、\t\t と一致する列がないことです。これを修正するには、次を使用します。

awk -v OFS="  " -F"\t" '{print $2, $1}' abcd.txt

どこ:

-F"\t"正確にカットするものです(タブ)。

-v OFS=" "区切るものです(2つのスペース)

例:

echo 'A\tB\t\tD' | awk -v OFS="    " -F"\t" '{print $2, $4, $1, $3}'

これは以下を出力します:

B    D    A    
于 2012-09-14T04:10:41.760 に答える