このようなファイルがあります。
gene - chr7 55675 55676 100 100
gene - chr7 55678 55679 100 100
gene - chr7 55683 55686 NP 100
ファイルはタブで区切られます。
列5が列4にあり、列4が列5になるようにファイルを変更してから、すべての列をそのまま印刷したいと思います。 5列目以降は2列しか表示されていませんが、さらにある可能性があります。
私はそれを試しましたが、cut -f 1,2,3,5,4,6-
動作しません。
私はawkソリューションを好みます。
ありがとう
答え1
フィールド 4 と 5 を置き換えます。
$ awk -F'\t' '{a=$4; $4=$5; $5=a;} 1' OFS='\t' file
gene - chr7 55676 55675 100 100
gene - chr7 55679 55678 100 100
gene - chr7 55686 55683 NP 100
仕組み:
-F'\t'
これにより、タブ入力にフィールド区切り記号が設定されます。
a=$4; $4=$5; $5=a
これにより、4番目と5番目のフィールドが変わります。
1
これはprint-the-lineのawkの神秘的な速記です。
OFS='\t'
これは awk に、タブを出力のフィールド区切り文字として使用するように指示します。
タイトルはそのままにしてください
最初の行を除くすべての行のフィールドを置き換えるには、次の手順を実行します。
awk -F'\t' -v OFS='\t' 'NR>1{a=$4; $4=$5; $5=a;} 1' file
NR
行番号です。NR>1
交換コマンドの前には条件があります。 swapコマンドは、条件がtrueの場合にのみ実行されます。
代替スタイル
一部のスタイリストでは、コードの前にOFSを割り当てることをお勧めします。
awk -F'\t' -v OFS='\t' '{a=$4; $4=$5; $5=a;} 1' file