从文件中复制某些空格

Dim*_*tis 3 text-processing

我有一个看起来像这样的文件

   18DMA      H 9996   0.886   5.687   5.320
   18DMA      H 9997   1.019   5.764   5.247
   18DMA     Np 9998   0.947   5.584   5.151
   18DMA      H 9999   1.033   5.541   5.113
   18DMA     Cn10000   0.880   5.674   5.050
   18DMA      H10001   0.831   5.616   4.971
   18DMA      H10002   0.814   5.751   5.091
   18DMA      H10003   0.957   5.735   5.003
   18DMA     Cn10004   0.837   5.486   5.185
Run Code Online (Sandbox Code Playgroud)

期望的输出是删除第 3 列,但是因为从某个行/行开始,接下来原子名称和编号之间没有空格,我无法按列进行删除。有没有办法通过选择一定数量的字符来进行删除?欲望输出应该是

   18DMA      H    0.886   5.687   5.320
   18DMA      H    1.019   5.764   5.247
   18DMA     Np    0.947   5.584   5.151
   18DMA      H    1.033   5.541   5.113
   18DMA     Cn    0.880   5.674   5.050
   18DMA      H    0.831   5.616   4.971
   18DMA      H    0.814   5.751   5.091
   18DMA      H    0.957   5.735   5.003
   18DMA     Cn    0.837   5.486   5.185
Run Code Online (Sandbox Code Playgroud)

pet*_*rph 8

cut在字符模式下使用:

cut -c1-15,21-
Run Code Online (Sandbox Code Playgroud)

您可能需要调整确切的字符数。同样,这假设输入不使用\t制表符(字符)作为分隔符(它可能不使用,因为那样你首先不会遇到连接字段的问题)。

如果有制表符,则expand程序可以将它们转换为空格。


Rud*_*diC 5

假设您没有<TAB>s 而是多个空格作为字段分隔符,并且通过查看和计算您的示例数据,我想出了

  $ sed -E 's/^(.{15}).{5}/\1/' file
   18DMA      H   0.886   5.687   5.320
   18DMA      H   1.019   5.764   5.247
   18DMA     Np   0.947   5.584   5.151
   18DMA      H   1.033   5.541   5.113
   18DMA     Cn   0.880   5.674   5.050
   18DMA      H   0.831   5.616   4.971
   18DMA      H   0.814   5.751   5.091
   18DMA      H   0.957   5.735   5.003
   18DMA     Cn   0.837   5.486   5.185
Run Code Online (Sandbox Code Playgroud)

它对前 15 个字符使用“反向引用”以\1substitute 命令的替换部分恢复它们。