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
    

답변2

주문하다

awk '{gsub(/\.*/,"",$1);print $0}' file.txt

산출

target_id length eff_length est_counts tpm
ENST000005831621 1066 967 1.69899 1.18376
ENST000005833551 891 792 13.8057 11.7445
ENST000005825285 5342 5243 21.3223 2.74003
ENST000004977441 964 865 0 0
ENST000004825641 1856 1757 3.29538 1.26367
ENST000003566548 4351 4252 56.2725 8.91668
ENST000003966842 4290 4191 0.206617 0.0332162
ENST000005410291 855 756 3.14783 2.80537
ENST000005374881 899 800 2.37306 1.99857
ENST000002640108 3939 3840 354.642 62.2241
ENST000004013945 2978 2879 28.362 6.63735
ENST000005660781 1627 1528 4.9964 2.2031
ENST000005952905 1242 1143 0 0
ENST000005953301 692 593 0 0
ENST000005969982 588 489 0 0
ENST000003745147 1810 1711 53.7113 21.1503

관련 정보