このようなファイルがあります。
chr1 14969 14830 2 100(26) 100(31) 100(46) 100(13) 100(26) 100(30) 100(31) 100(36) 100(38)
chr1 15795 15039 2 100(3) 100(4) 100(4) 100(3) 100(6) 100(4) 100(2) 100(6) 100(6)
chr1 16606 15948 2 80(4) *(0) *(0) 100(1) 75(3) 100(3) 66.67(2) 100(3) *(0)
chr1 16606 16311 2 20(1) *(0) *(0) *(0) 25(1) *(0) 33.33(1) *(0) 100(1)
chr1 16853 16766 2 *(0) *(0) *(0) *(0) *(0) *(0) 100(1) *(0) 100(2)
chr1 16857 16766 2 100(2) 100(5) 100(5) 100(1) 100(2) 100(2) 100(2) 100(4) 100(2)
chr1 17232 17056 2 100(2) 100(4) 100(8) 100(2) 100(2) 100(7) 100(6) 100(5) 100(3)
chr1 17525 17369 2 *(0) *(0) 100(2) *(0) *(0) *(0) *(0) *(0) *(0)
chr1 17605 17056 1 50(9) 38.89(7) 57.89(11) 30(3) *(0) *(0) 40.74(11) 65.52(19) 57.14(16)
chr1 17605 17369 1 50(9) 61.11(11) 42.11(8) 70(7) 100(3) 100(8) 59.26(16) 34.48(10) 42.86(12)
列 3 を列 2 に置き換え、列 4 が 2 の場合は - に置き換え、それ以外の場合は + に置き換えます。出力は以下のようになります。
私はこれをawkでやりたいです。私はこれを使って熱を交換しようとしています。また、出力のヘッダ行をそのまま維持したいと思います。
awk -F '\t' -v OFS="\t" 'NR > 1{a=$2; $2=$3; $3=a;} 1' file
4列が1か2に応じて+と-に変更し、4列後に必要な数の列を印刷するにはどうすればよいですか?
出力
chr1 14969 14830 - 100(26) 100(31) 100(46) 100(13) 100(26) 100(30) 100(31) 100(36) 100(38)
chr1 15795 15039 - 100(3) 100(4) 100(4) 100(3) 100(6) 100(4) 100(2) 100(6) 100(6)
chr1 16606 15948 - 80(4) *(0) *(0) 100(1) 75(3) 100(3) 66.67(2) 100(3) *(0)
chr1 16606 16311 - 20(1) *(0) *(0) *(0) 25(1) *(0) 33.33(1) *(0) 100(1)
chr1 16853 16766 - *(0) *(0) *(0) *(0) *(0) *(0) 100(1) *(0) 100(2)
chr1 16857 16766 - 100(2) 100(5) 100(5) 100(1) 100(2) 100(2) 100(2) 100(4) 100(2)
chr1 17232 17056 - 100(2) 100(4) 100(8) 100(2) 100(2) 100(7) 100(6) 100(5) 100(3)
chr1 17525 17369 - *(0) *(0) 100(2) *(0) *(0) *(0) *(0) *(0) *(0)
chr1 17605 17056 + 50(9) 38.89(7) 57.89(11) 30(3) *(0) *(0) 40.74(11) 65.52(19) 57.14(16)
chr1 17605 17369 + 50(9) 61.11(11) 42.11(8) 70(7) 100(3) 100(8) 59.26(16) 34.48(10) 42.86(12)
ありがとう
答え1
awk
たとえば、次のスクリプト名を使用しますscript.awk
。
{
temp=$2
$2=$3
$3=temp
if ( $4 == 2 ) {
$4="-"
} else {
$4="+"
}
print
temp=''
}
以下はあなたの要件を満たすようです。
$ awk -F '\t' -v OFS='\t' -f script.awk input