cutコマンドからの出力フィールドの順序の強制
-
10-07-2019 - |
質問
このようなことをしたい:
cat abcd.txt | cut -f 2,1
そして出力の順序を2にした後、1にしたい。私がテストしているマシン(FreeBSD 6)では、これは起きていません(1,2の順序での印刷)。これを行う方法を教えてもらえますか?
この反転を行うシェルスクリプトをいつでも作成できることは知っていますが、「カット」コマンドオプションを使用して何かを探しています。
cutを含むcoreutilsのバージョン5.2.1を使用していると思います。
解決
これは、 cut
を使用して行うことはできません。マニュアルページによると:
選択された入力は、読み取られた順序と同じ順序で書き込まれ、 一度だけ記述します。
パッチング cut
は提案 多く 回ですが、完全なパッチは拒否されました。
代わりに、次のように awk
を使用して実行できます。
awk '{print($2,"\t",$1)}' abcd.txt
\ t
をフィールドセパレータとして使用しているものに置き換えます。
他のヒント
ラースの答えは素晴らしかったが、私はさらに良いものを見つけた。彼の問題は、列がないため\ 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
所属していません StackOverflow