Awk 如何删除第一列中只有点之后的所有内容?
我有多个这样的文件:Awk 如何删除第一列中只有点之后的所有内容?,awk,Awk,我有多个这样的文件: head Stomach.v7.egenes.txt ENSG00000238009.2 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245 ENSG00000237683.5 AL627309.1 1 134901 139379 - 2123 1.02105 359.907 ENSG00000235146.2 RP5-857K21.2 1 523009 530148 + 4098 1.03503 592.
head Stomach.v7.egenes.txt
ENSG00000238009.2 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683.5 AL627309.1 1 134901 139379 - 2123 1.02105 359.907
ENSG00000235146.2 RP5-857K21.2 1 523009 530148 + 4098 1.03503 592.973
ENSG00000231709.1 RP5-857K21.1 1 521369 523833 - 4101 1.07053 559.642
ENSG00000223659.1 RP5-857K21.5 1 562757 564390 - 4236 1.05527 595.015
ENSG00000237973.1 hsa-mir-6723 1 566454 567996 + 4247 1.05299 592.876
如何删除每个文件第一列中第一个点之后的所有内容?要获取此示例的详细信息,请执行以下操作:
ENSG00000238009 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683 AL627309.1 1 134901 139379 - 2123 1.02105 359.907
ENSG00000235146 RP5-857K21.2 1 523009 530148 + 4098 1.03503 592.973
ENSG00000231709 RP5-857K21.1 1 521369 523833 - 4101 1.07053 559.642
ENSG00000223659 RP5-857K21.5 1 562757 564390 - 4236 1.05527 595.015
ENSG00000237973 hsa-mir-6723 1 566454 567996 + 4247 1.05299 592.876
我试着这样做:
awk 'BEGIN{FS=OFS=" "} {gsub(/\./, " ", $1)} 1' Stomach.v7.egenes.txt > test.txt
但这并没有给我上面的输出
如何删除第一列中第一个点之后的所有内容
使用awk
,它实际上很简单:
awk '{sub(/\..*$/, "", $1)} 1' file
如果您使用的是gnu awk,则可以使用就地文件编辑并避免循环:
awk -i inplace '{sub(/\..*$/, "", $1)} 1' *.v7.egenes.txt
sed的另一个选项:
$ cat data
ENSG00000238009.2 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683.5 AL627309.1 1 134901 139379 - 2123 1.02105 359.907
$ cat data | sed -E 's/(^.?{15})\.[0-9]/\1/'
ENSG00000238009 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683 AL627309.1 1 134901 139379 - 2123 1.02105 359.907
谢谢,要在循环中对以*.v7.egenes.txt结尾的所有文件执行此操作,我可以执行以下操作:#/用于*.v7.egenes.txt中f的bin/bash do awk'{sub(/\..*$/,“”,$1)}1'$f“>“临时文件”和&mv“临时文件”$f”done@anamaria或者使用GNU awk
awk-i inplace'{sub(/\..*$/,“”,$1)}1'*.v7.egenes.txt
,即使用“inplace”编辑而不是循环。谢谢@EdMorton,让我在回答中添加这个GNU awk命令。
$ cat data
ENSG00000238009.2 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683.5 AL627309.1 1 134901 139379 - 2123 1.02105 359.907
$ cat data | sed -E 's/(^.?{15})\.[0-9]/\1/'
ENSG00000238009 RP11-34P13.7 1 89295 129223 - 2073 1.03557 343.245
ENSG00000237683 AL627309.1 1 134901 139379 - 2123 1.02105 359.907