同様の多くのテキスト行から2つの列間のタブ文字を削除する方法は?

同様の多くのテキスト行から2つの列間のタブ文字を削除する方法は?

デフォルトでは、以下の例と同じ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変数という名前にcpyNF--、現在の入力行から最後のフィールドを削除します。その後、その後ろの行を$0印刷します。指定$0cpyOFS='\t'酸素出力F生産するS分割ツール。

またはsed:

sed 's/\t\([A-Z]\)$/\1/' infile

これはabで一致するグループをキャプチャし、各行の\t末尾に単一のアルファベット文字をキャプチャし、一致するアルファベット文字のみを逆に参照し、\1代替部分では文字と\tabのみを削除します。

答え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

説明する:

  • -pPerlに1行ずつ読み込み、自動的に行を印刷します。

  • s/\t(?!.*\t)//正規表現は、Perlに、右側に他のTABが表示されないTAB文字を見つけるように指示します。これはこれが最後のTABであることを意味します。その後、TABが削除されます。

関連情報