下面是我的文件 nvt.gro 的一部分,我只想删除最后一列中的减号“-”。我尝试选择整个列,然后尝试修改它,但没有成功。有人能告诉我如何删除某一列中的特定字符(在我的情况下是减号),在我的情况下是最后一列。我正在使用 ubuntu 文本编辑器。我尝试使用 Alt+Ctrl+Shift+End 选择整个列,然后按 Ctrl + Shift + 右键,以便我可以修改整个列,但我做不到。
谢谢
真空中的 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
答案1
使用 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
我发现 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
答案3
如果您想要真正基于列的东西,那么您可以使用 awk ex。
awk '{sub(/-/," ",$NF)} 1' file
这应用了正则表达式子仅将修改内容替换为NF
第 列(其中NF
是字段数)。但是,这将使用默认的单空格输出字段分隔符重写修改后的记录 - 这可能会弄乱列对齐。
如果你有权访问磨坊主,那么你可以做类似的事情而不会破坏对齐:
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/