私のLinuxシステムには複数行のファイルがあり、構造は次のとおりです。
S 名前。足場開始寸法方向長さ順
私はそれに変更する必要があります。
S 足場。足場開始寸法方向長さ順
たとえば、次のように変更します。
s Sapo.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s Rana.RANA1 9000 10 + 13588361 ATAATAAAAT
s Sapo.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s Sapo.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s Coqu.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
到着する:
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
ありがとうございます!
答え1
sed 's/[[:alnum:]]*\.\([[:alnum:]_.]*\)/\1.\1/' file
その後、英数字の文字セットで始まり、その後にドットが続く文字列を探します。この行は削除されます。その後には、英数字、ドット、アンダースコアで構成される文字列が続きます。これはすべて、中央に点がある式の2番目の部分で2回置き換えられます。
問題のデータを考慮すると、次のような結果が得られます。
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
これは、「名前」が一致し、[[:alnum:]]*
「足場」が一致すると仮定されます[[:alnum:]_.]*
。
やや「賢い」正規表現は次のとおりです。
sed 's/[[:alnum:]]\{1,\}\.\([[:alnum:]]\{1,\}\([._][[:digit:]]\{1,\}\)\{0,1\}\)/\1.\1/' file
ドットの両側の部分文字列は空白にできず、足場サフィックス(_1
または.1
など)はオプションで足場名とは別に一致します。
拡張正規表現(おそらく読みやすさ)として、これは次のように書かれています。
sed -E 's/[[:alnum:]]+\.([[:alnum:]]+([._][[:digit:]]+)?)/\1.\1/' file
これは、与えられたデータに対する最初のコマンドと同じ出力を生成します。
答え2
awk '{
sub(/[^.]*\./,"",$2) #From the 2nd field, remove all up to first dot
$2=$2"."$2 #Replicate the resulting second field
print
}' file | column -t
出力:
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
答え3
この試み、
awk -F '\t' '{$2=gensub(/\w+\.(.*)/,"\\1.\\1","g",$2);}1' file | column -t
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT