デフォルトでは、以下の例と同じ1/2百万行のテキストを含む書式を設定する文書があります。次のように2文字間のタブを削除する必要があります。
rs207460002 26 15579 T A
rs207459997 26 15615 G C
rs527236190 26 15637 T C
次のようになります。
rs207460002 26 15579 TA
rs207459997 26 15615 GC
rs527236190 26 15637 TC
どんな解決策でも大変感謝します!
注:これは5つのタブ列です。
答え1
他のawk
方法:
awk '{cpy=$NF; NF--; print $0 cpy }' OFS='\t' infile
これは最後のフィールドのコピーを$NF
変数という名前にcpy
しNF--
、現在の入力行から最後のフィールドを削除します。その後、その後ろの行を$0
印刷します。指定$0
cpy
OFS='\t'
酸素出力F生産するS分割ツール。
またはsed
:
sed 's/\t\([A-Z]\)$/\1/' infile
これはabで一致するグループをキャプチャし、各行の\t
末尾に単一のアルファベット文字をキャプチャし、一致するアルファベット文字のみを逆に参照し、\1
代替部分では文字と\t
abのみを削除します。
答え2
$ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4 $5 }' input.txt
rs207460002 26 15579 TA
rs207459997 26 15615 GC
rs527236190 26 15637 TC
答え3
回答
sed -ri "s/([A-Z])\t([A-Z])$/\1\2/" your_file
説明する
-r
- 正規表現拡張を使用します。 (スペースシーケンスを使用せずに正規表現で特定の文字を使用できます)
-i
- ファイルの変更を保存して書き込まないでくださいstdout
。
s/([A-Z])\t([A-Z])$/\1\2/
-[capital_letter][TAB_key][capital_letter]
行末で一致し、一致するものに置き換えられます[capital_letter][capital_letter]
。
your_file
- 処理したいファイルsed
。
答え4
このツールを使用するとsed
簡単です。
sed -e 's/\t//4' input_file
説明する:
\t
役割を表現したものですTAB
。 GNU sedでは大丈夫です。 OTWはリテラルTABを使用します。s/\t//4
これは、現在の行で4番目に表示されるTAB文字を削除することを意味します。
ツアーを利用Perl
できます。
perl -pe 's/\t(?!.*\t)//' input_file
説明する:
-p
Perlに1行ずつ読み込み、自動的に行を印刷します。s/\t(?!.*\t)//
正規表現は、Perlに、右側に他のTABが表示されないTAB文字を見つけるように指示します。これはこれが最後のTABであることを意味します。その後、TABが削除されます。