我有这个输入文件:
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
Run Code Online (Sandbox Code Playgroud)
我想.*从第一列中删除:
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
Run Code Online (Sandbox Code Playgroud)
请告诉我可以使用什么 sed 或 awk 命令来解决此问题。
最简单的方法是删除.每一行第一个之后的所有数字:
$ 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
Run Code Online (Sandbox Code Playgroud)
这将找到该.行中的第一个.并将其后的任何数字替换为.. 但是,鉴于这些是成绩单 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
Run Code Online (Sandbox Code Playgroud)
如果您可以在没有 a 的第一列中有一个值.,那么这些命令将更改下一个可用列,并带有.后跟数字。要明确限制为第一列,您可以使用以下其中一个:
awk
awk -v OFS='\t' '{sub(/\.[0-9]*/,"",$1)}1' file
Run Code Online (Sandbox Code Playgroud)
或者,留下尾随.:
awk -v OFS='\t' '{sub(/\.[0-9]*/,".",$1)}1' file
Run Code Online (Sandbox Code Playgroud)GNU sed
sed -E 's/^(\S+)\.[0-9]*/\1/' file
Run Code Online (Sandbox Code Playgroud)
或者,留下尾随.:
sed -E 's/^(\S+)\.[0-9]*/\1./' file
Run Code Online (Sandbox Code Playgroud)
大多数其他 sed 实现:
sed -E 's/^([^[:blank:]]*)\.[0-9]*/\1/' file
Run Code Online (Sandbox Code Playgroud)
任何 sed:
sed 's/^\([^[:blank:]]*\)\.[0-9]*/\1/' file
Run Code Online (Sandbox Code Playgroud)珀尔
perl -pe 's/^(\S+)\.\d+/\1/' file
Run Code Online (Sandbox Code Playgroud)
或者,留下尾随.:
perl -pe 's/^(\S+)\.\d+/\1./' file
Run Code Online (Sandbox Code Playgroud)