AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1227791
Accepted
Mohamed Abdelaal
Mohamed Abdelaal
Asked: 2020-04-17 14:49:26 +0800 CST2020-04-17 14:49:26 +0800 CST 2020-04-17 14:49:26 +0800 CST

是否可以从文本文件的特定列(最后一列)中删除减号?

  • 772

下面是我的文件的一部分,名为 nvt.gro 我只想删除最后一列中的减号“-”。我曾尝试选择完整的列,然后尝试对其进行修改,但没有成功。谁能告诉我如何在我的情况下的最后一列中删除特定字符,该字符在我的情况下是减号。我正在使用 ubuntu 文本编辑器。我尝试使用 Alt+Ctrl+Shift+End 选择完整的列,然后使用 Ctrl + Shift + right,以便我可以修改整个列,但我不能。

谢谢

真空中的 GRM

192700

2794GRM     C311175  17.065  14.579   0.041  0.9776 -0.3700 -0.3156
2794GRM     C411176  16.942  14.650   0.044 -0.2129  0.6799 -0.0069
2795GRM     C111177  16.942  14.792   0.039 -0.1699 -0.1038 -0.0750
2795GRM     C211178  17.065  14.863   0.037  0.4158 -0.0119 -0.4087
2795GRM     C311179  17.069  15.003   0.029 -0.1180 -0.0134 -0.3801
2795GRM     C411180  16.945  15.073   0.020 -1.1317  0.8381 -0.4420
2796GRM     C111181  16.946  15.215   0.009 -0.6160  0.7328  0.3329
2796GRM     C211182  17.069  15.286   0.004  0.4990 -0.4661  0.0473
2796GRM     C311183  17.068  15.428  13.995  1.1753  0.1069  0.4126
2796GRM     C411184  16.942  15.497  13.995  0.1072 -0.1759  1.0031
2797GRM     C111185  16.942  15.640  13.989  0.0772 -0.7484  0.6072
2797GRM     C211186  17.065  15.709  13.987  0.3197  0.7923  0.7660
2797GRM     C311187  17.064  15.851  13.987  0.6508  0.1744  0.8011
2797GRM     C411188  16.941  15.922  13.988 -0.0779 -0.5235  0.4419
2798GRM     C111189  16.940  16.064  13.993 -0.4092 -0.2008  0.0229
2798GRM     C211190  17.064  16.135  13.995 -0.0923 -0.0063 -0.2445
2798GRM     C311191  17.060  16.277  13.996 -0.6767 -0.0982  0.1754
2798GRM     C411192  16.938  16.350  13.991 -0.3535  0.5098 -0.5576
2799GRM     C111193  16.941  16.492  13.990 -1.1218 -0.1434 -0.7878
2799GRM     C211194  17.062  16.566  13.986  0.4727 -0.4516 -0.1352
2799GRM     C311195  17.066  16.708  13.976  0.2361  0.1619  0.0749
2799GRM     C411196  16.944  16.779  13.973  0.0201 -0.3561 -0.0658
2800GRM     C111197  16.944  16.922  13.973 -0.6244 -0.2583  1.1019
2800GRM     C211198  17.065  16.998  13.977 -0.3723 -0.3714  0.1573
2800GRM     C311199  17.063   0.099  13.979 -0.0548 -0.1926 -0.0981
2800GRM     C411200  16.942   0.172  13.971 -0.0881  0.1676 -0.0564
2801G8LE   C6011201   5.831   0.116  10.796 -0.2284  0.5235 -0.4732
2801G8LE   C5711202   5.835   0.256  10.802  0.3394  0.2015 -0.6239
2801G8LE   C5011203   5.941   0.316  10.877  0.2831 -0.4177 -0.4594
2801G8LE   C4011204   5.987   0.424  10.807 -0.0715 -0.4403  0.0066
2801G8LE   C3011205   6.118   0.463  10.803  0.1128  0.6914  0.2241
2801G8LE   C2011206   6.182   0.514  10.694 -0.1651  0.0946 -0.2201
2801G8LE   C1111207   6.315   0.466  10.687 -0.0770  0.3137 -0.3695
2801G8LE    C511208   6.368   0.422  10.571  0.4080  0.4664  0.8689
2801G8LE    C211209   6.443   0.305  10.562  0.0527 -0.6675 -0.2050
2801G8LE    C111210   6.411   0.245  10.447  0.0286 -0.0604 -0.1501
2801G8LE    C311211   6.405   0.108  10.435 -0.4744 -0.0151 -0.6526
2801G8LE    C711212   6.303   0.052  10.359  0.0532  0.0121 -0.2123
2801G8LE   C1411213   6.207   0.134  10.300 -0.0620 -0.3235 -0.2260
2801G8LE    C911214   6.219   0.271  10.295 -0.1192 -0.3422 -0.4145
2801G8LE    C411215   6.317   0.322  10.379  0.1036 -0.1823  0.1164
command-line text-processing
  • 3 3 个回答
  • 242 Views

3 个回答

  • Voted
  1. user986805
    2020-04-18T00:05:45+08:002020-04-18T00:05:45+08:00

    用 sed 删除/替换第 n 个字符:

    $ sed 's/./ /61' file
    

    将更改打印到控制台。

    或就地替换:

    $ sed -i 's/./ /61' file
    

    将更改保存回文件。

    前:

    2794GRM     C311175  17.065  14.579   0.041  0.9776 -0.3700 -0.3156
    2794GRM     C411176  16.942  14.650   0.044 -0.2129  0.6799 -0.0069
    2795GRM     C111177  16.942  14.792   0.039 -0.1699 -0.1038 -0.0750
    ^           ^        ^                      ^       ^       ^ 
    1           13       22 ...                 45      53      61
    

    后:

    2794GRM     C311175  17.065  14.579   0.041  0.9776 -0.3700  0.3156
    2794GRM     C411176  16.942  14.650   0.044 -0.2129  0.6799  0.0069
    2795GRM     C111177  16.942  14.792   0.039 -0.1699 -0.1038  0.0750
    
    • 2
  2. Mark Schafer
    2020-04-18T11:29:45+08:002020-04-18T11:29:45+08:00

    我发现 tr 命令非常有用

    $ tr -d -
    

    如果您要读取数据,修改它并创建一个新报告,这就是我选择的方式。

    #!/bin/bash
    _abs() {
        echo $1 | tr -d -
    }
    
    while read -r f1 f2 f3 f4 f5 f6 f7 f8; do
        newf8=$(_abs $f8)
        echo "$f1     $f2  $f3  $f4  $f5  $f6  $f7  $newf8" >> newreport.txt
    done < data
    

    数据输入

    2794GRM     C311175  17.065  14.579   0.041  0.9776 -0.3700 -0.3156
    2794GRM     C411176  16.942  14.650   0.044 -0.2129  0.6799 -0.0069
    2795GRM     C111177  16.942  14.792   0.039 -0.1699 -0.1038 -0.0750
    2795GRM     C211178  17.065  14.863   0.037  0.4158 -0.0119 -0.4087
    

    数据输出

    2794GRM     C311175  17.065  14.579  0.041  0.9776 -0.3700  0.3156
    2794GRM     C411176  16.942  14.650  0.044 -0.2129  0.6799  0.0069
    2795GRM     C111177  16.942  14.792  0.039 -0.1699 -0.1038  0.0750
    2795GRM     C211178  17.065  14.863  0.037  0.4158 -0.0119  0.4087
    
    • 2
  3. Best Answer
    steeldriver
    2020-04-17T15:16:51+08:002020-04-17T15:16:51+08:00

    如果你想要真正基于列的东西,那么你可以使用 awk ex。

    awk '{sub(/-/," ",$NF)} 1' file
    

    这仅将正则表达式替换应用于第thNF列(其中NF是字段数)。但是,这将使用默认的单空格输出字段分隔符重写修改的记录 - 这可能会弄乱列对齐。

    如果您可以访问Miller,那么您可以在不破坏对齐方式的情况下做类似的事情:

    mlr --nidx put -S '$[NF] =~ "^-(.*)" {$[NF] = " \1"}' file
    

    或者,您可以使用锚定的扩展正则表达式来识别最后一列[^[:blank]]+$,例如

    sed -E 's/-([^[:blank:]]+)$/ \1/' file
    

    要就地编辑文件,

    sed -i -E 's/-([^[:blank:]]+)$/ \1/' file
    

    要仅将替换应用于以一个或多个十进制数字开头后跟字符串 G8LE 的行,您可以修改 sed 表达式,如下所示:

    /^[0-9]+G8LE/s/-([^[:blank:]]+)$/ \1/
    
    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve