Unix 剪下绳子的中间部分

Unix 剪下绳子的中间部分,unix,Unix,这就是我的数据 正交组12213.faa.aligned.treefile.rooting.0.gtpruned.Reaginate.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 正交组12706.faa.aligned.treefile.rooting.0.gtpruned.Reaginate.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

这就是我的数据

正交组12213.faa.aligned.treefile.rooting.0.gtpruned.Reaginate.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0

正交组12706.faa.aligned.treefile.rooting.0.gtpruned.Reaginate.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0

我想以这样的内容结束(不使用.faa.aligned.treefile.rooting.0.gtpruned.reaginate.0):

正交组12213 0.0 0.0.0.0.0.0.0.0 0.0.0 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 0.0 0

正交组12706 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0


我尝试过各种“剪切”功能,但运气不佳。请帮忙

我会使用
sed

sed 's/\.[^ ]*//'

这意味着,“找到第一个点,以及它后面所有不是空格的字符,并将它们替换为零。”

您的示例显示了两行同时包含
.faa.aligned.treefile.rooting.0.gtpruned.reaginate.0
。如果这是一个固定的字符串,并且第一部分始终是精确的15个位置,则可以使用
剪切

# bad solution, only cut
cut -c1-15,68- file
这个解决方案可以被标记为糟糕。当起始字符串或中间部分的长度发生变化时,您将出现故障。 当您知道要删除的字符串以一个点开始,并且第一个空格是下一个切割点时,您可以使用

# also bad
sed 's/[.]/ /' file | cut -d" " -f1,3-
使用
cut
保持简单很好,但是
cut
需要简单的输入。
首先,思考找到中间字符串的最佳方法是什么,并为此使用类似于
sed
awk
的内容

# example with sed
str='.faa.aligned.treefile.rooting.0.gtpruned.rearrange.0'
sed 's/'$str'//' file

这对我有用!非常感谢您的详细解释:)@user10934304您可以接受我的答案,请参见