awkは特定の列から最後まで印刷するのに役立ちます。

awkは特定の列から最後まで印刷するのに役立ちます。

このようなファイルがあります。

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

関連情報