ファイルを使用しようとしています...
MT 200610-1 100 2757
MT 200610-10 100 6753
MT 200610-100 100 15173
1、2、4列を使って以下のような新しいファイルを作成したいと思います。
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
最初の3つだけを実行すると機能します。
awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4}' test_ace_geno1.map
chrMT 2756 2757
chrMT 6752 6753
chrMT 15172 15173
最後に2番目の列を追加しようとすると、奇妙なことが起こります。
awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4,$2}' test_ace_geno1.map
200610-16 2757
200610-10 6753
200610-100 15173
設定リストを使用してvimを実行すると、[全般]タブとして表示されるため、その列に何が起こっているのか、全体がめちゃくちゃになるのかわかりません。
MT^I200610-1^I100^I2757$
MT^I200610-10^I100^I6753$
MT^I200610-100^I100^I15173$
答え1
スタイルdos
ライン終了:
$ cat -e ip.txt
MT 200610-1 100 2757^M$
MT 200610-10 100 6753 ^M$
MT 200610-100 100 15173^M$
$ awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4}' ip.txt
chrMT 2756 2757
chrMT 6752 6753
chrMT 15172 15173
$ awk 'BEGIN{FS=="\t";OFS=="\t"}{print "chr"$1,$4-1,$4,$2}' ip.txt
200610-16 2757
chrMT 6752 6753 200610-10
200610-100 15173
perl
スタイル行の終わりを処理しdos
て目的の出力を取得するには、次の手順を実行します。
$ perl -lane 'print "chr$F[0]\t", $F[3]-1, "\t$F[3]\t$F[1]"' ip.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
を使用しawk
、最初に行末をunix
スタイルに変更し、dos2unix
可能であれば使用または使用します。perl
$ perl -i -pe 's|\r\n|\n|' ip.txt
$ cat -e ip.txt
MT 200610-1 100 2757$
MT 200610-10 100 6753 $
MT 200610-100 100 15173$
それから
$ awk -v OFS='\t' '{print "chr"$1,$4-1,$4,$2}' ip.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100
または、以下を使用して、GNU awk
DOSスタイルの行末を処理するように入力レコードを設定します。
gawk -v RS='\r\n' -v OFS='\t' '{print "chr"$1,$4-1,$4,$2}' ip.txt
答え2
ステートメントのすべての内容を目的の形式で入力し、減算などの必要print
な操作を実行します$NF - 1
。
awk '{print "chr" $1, ($NF - 1), $NF, $2}' file.txt
$4
明らかにここでは代わりに使用できますが、$NF
4番目のフィールドは最後のフィールドなので、両方とも同じフィールドを指します。
例:
% awk '{print "chr" $1, ($NF - 1), $NF, $2}' file.txt
chrMT 2756 2757 200610-1
chrMT 6752 6753 200610-10
chrMT 15172 15173 200610-100