次の約700万行のファイルがあります。
head gokind_SNPs.txt
1:753541:G:A
1:769223:C:G
1:771967:G:A
1:778745:A:G
1:779322:A:G
...
2番目のコロンの後のすべての項目をどのように削除して、次のように見えますか?
1:753541
1:769223
1:771967
1:778745
1:779322
...
これを試しましたが、うまくいかず、ファイルが変更されませんでした。
sed 's/:[A-Z].* / /g' gokind_SNPsF.txt > gokind_SNPsf.txt
答え1
awkに含まれる文字を削除するには、awkを使用してください。
awk -F":" '{ print $1":"$2 }' gokind_SNPs.txt > gokind_SNPs_OUTPUT.txt
答え2
使用中の正規表現がデータに存在しないスペースを一致させようとするため、コマンドは何もしません。
代わりに
sed 's/:[A-Z].*//' gokind_SNPsF.txt >new-gokind_SNPsf.txt
:
これにより、大文字の直後の各行の最初の行にあるすべてのテキストが削除されます。また、スペースを変更する代わりに何も変更しないことを選択し、g
不要なフラグを削除しました。
私はあなたが持っていないと仮定します実際に表示されたコマンドを実行すると、開始前にデータファイルが切り捨てられます(空になります)sed
(読み込んでいるのと同じファイルにリダイレクトされるため)。
sed
内部編集に使用するにはsed -i
、」をお読みください。sed -i(所定の位置で編集)を使用して移植性を達成するには?」。
あなたのコマンドよりも速い選択肢は次sed
のとおりです。
cut -d: -f -2 gokind_SNPsF.txt >new-gokind_SNPsf.txt
:
各行から最初の2つの区切りフィールドのみを抽出します。またはを-f -2
使用して、最初の2つの列を取得するように指定できます。-f 1,2
-f 1-2
を使用するawk
とします
awk -F : 'BEGIN { OFS=FS } { print $1, $2 }' gokind_SNPsF.txt >new-gokind_SNPsf.txt
各行の最初の2つのフィールドのみが新しいファイルに印刷されます。
GNUを使用すると、awk
次のコマンドを使用して任意の場所で編集できます。
awk -i inplace -F : 'BEGIN { OFS=FS } { print $1, $2 }' gokind_SNPsF.txt
望むより」awkを使ってファイルを変更する方法は? ("sed -i"と同じ)「これについて詳しく学んでください。
答え3
このcut
コマンドはまさに以下のために設計されています。
cut -d: -f-2
答え4
読んでいるファイルに絶対に書き込まないでください。
sed 's/:[A-Z].* / /' gokind_SNPsF.txt > tmp && mv tmp gokind_SNPsf.txt
sed -i
または、使用しているsedバージョンでサポートされている場合は使用してください。