sed コマンドまたは awk コマンドでテキストを削除する

sed コマンドまたは awk コマンドでテキストを削除する

次の入力ファイルがあります。

target_id          length   eff_length  est_counts  tpm
ENST00000583162.1   1066       967       1.69899    1.18376
ENST00000583355.1   891        792       13.8057    11.7445
ENST00000582528.5   5342       5243      21.3223    2.74003
ENST00000497744.1   964         865       0            0
ENST00000482564.1   1856       1757       3.29538    1.26367
ENST00000356654.8   4351        4252      56.2725    8.91668
ENST00000396684.2   4290        4191      0.206617   0.0332162
ENST00000541029.1   855         756       3.14783    2.80537
ENST00000537488.1   899         800       2.37306    1.99857
ENST00000264010.8   3939        3840      354.642    62.2241
ENST00000401394.5   2978        2879       28.362     6.63735
ENST00000566078.1   1627        1528        4.9964    2.2031
ENST00000595290.5   1242        1143         0            0
ENST00000595330.1   692          593          0           0
ENST00000596998.2   588          489          0            0
ENST00000374514.7   1810         1711       53.7113    21.1503

.*最初の列から削除したいです。

target_id          length   eff_length  est_counts  tpm
ENST00000583162.   1066       967       1.69899    1.18376
ENST00000583355.   891        792       13.8057    11.7445
ENST00000582528.   5342       5243      21.3223    2.74003
ENST00000497744.   964         865       0            0
ENST00000482564.   1856       1757       3.29538    1.26367
ENST00000356654.   4351        4252      56.2725    8.91668
ENST00000396684.   4290        4191      0.206617   0.0332162
ENST00000541029.   855         756       3.14783    2.80537
ENST00000537488.   899         800       2.37306    1.99857
ENST00000264010.   3939        3840      354.642    62.2241
ENST00000401394.   2978        2879       28.362     6.63735
ENST00000566078.   1627        1528        4.9964    2.2031
ENST00000595290.   1242        1143         0            0
ENST00000595330.   692          593          0           0
ENST00000596998.   588          489          0            0
ENST00000374514.   1810         1711       53.7113    21.1503

この問題を解決するために使用できるsedまたはawkコマンドを教えてください。

ベストアンサー1

最も簡単な方法は、.各行の最初の数字以降のすべての数字を削除することです。

$ sed 's/\.[0-9]*/\./' file
target_id          length   eff_length  est_counts  tpm
ENST00000583162.   1066       967       1.69899    1.18376
ENST00000583355.   891        792       13.8057    11.7445
ENST00000582528.   5342       5243      21.3223    2.74003
ENST00000497744.   964         865       0            0
ENST00000482564.   1856       1757       3.29538    1.26367
ENST00000356654.   4351        4252      56.2725    8.91668
ENST00000396684.   4290        4191      0.206617   0.0332162
ENST00000541029.   855         756       3.14783    2.80537
ENST00000537488.   899         800       2.37306    1.99857
ENST00000264010.   3939        3840      354.642    62.2241
ENST00000401394.   2978        2879       28.362     6.63735
ENST00000566078.   1627        1528        4.9964    2.2031
ENST00000595290.   1242        1143         0            0
ENST00000595330.   692          593          0           0
ENST00000596998.   588          489          0            0
ENST00000374514.   1810         1711       53.7113    21.1503

.その後、行の最初の行を探し、.その後の数字をその行に置き換えます.。しかし、これは成績表IDなので、おそらく必要ではないので、.次のことを試してください。

$ sed 's/\.[0-9]*//' file
target_id          length   eff_length  est_counts  tpm
ENST00000583162   1066       967       1.69899    1.18376
ENST00000583355   891        792       13.8057    11.7445
ENST00000582528   5342       5243      21.3223    2.74003
ENST00000497744   964         865       0            0
ENST00000482564   1856       1757       3.29538    1.26367
ENST00000356654   4351        4252      56.2725    8.91668
ENST00000396684   4290        4191      0.206617   0.0332162
ENST00000541029   855         756       3.14783    2.80537
ENST00000537488   899         800       2.37306    1.99857
ENST00000264010   3939        3840      354.642    62.2241
ENST00000401394   2978        2879       28.362     6.63735
ENST00000566078   1627        1528        4.9964    2.2031
ENST00000595290   1242        1143         0            0
ENST00000595330   692          593          0           0
ENST00000596998   588          489          0            0
ENST00000374514   1810         1711       53.7113    21.1503

最初の列に値がない場合、.このコマンドは使用可能な次の列と.数字を変更します。最初の列を明示的に制限するには、次のいずれかを使用できます。

  1. アッ

    awk -v OFS='\t' '{sub(/\.[0-9]*/,"",$1)}1' file
    

    または末尾を維持してください.

    awk -v OFS='\t' '{sub(/\.[0-9]*/,".",$1)}1' file
    
  2. GNU sed

    sed -E 's/^(\S+)\.[0-9]*/\1/' file
    

    または末尾を維持してください.

    sed -E 's/^(\S+)\.[0-9]*/\1./' file
    

    他のほとんどのsed実装:

    sed -E 's/^([^[:blank:]]*)\.[0-9]*/\1/' file
    

    すべてのsed:

    sed 's/^\([^[:blank:]]*\)\.[0-9]*/\1/' file
    
  3. 真珠

    perl -pe 's/^(\S+)\.\d+/\1/' file
    

    または末尾を維持してください.

    perl -pe 's/^(\S+)\.\d+/\1./' file
    

おすすめ記事