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