列文件用空格分隔 标题NpXynWT_apo_300K_0001_琥珀色
ATOM 1 N MET 1 22.849 2.086 17.904 1.00 0.00 N
ATOM 2 CA MET 1 21.710 2.631 17.411 1.00 0.00 C
ATOM 3 C MET 1 20.525 1.737 17.578 1.00 0.00 C
ATOM 4 O MET 1 20.530 0.650 17.113 1.00 0.00 O
ATOM 5 CB MET 1 21.878 2.974 15.929 1.00 0.00 C
ATOM 6 CG MET 1 20.710 3.743 15.334 1.00 0.00 C
ATOM 7 SD MET 1 20.954 4.142 13.593 1.00 0.00 S
ATOM 8 CE MET 1 22.272 5.350 13.704 1.00 0.00 C
ATOM 9 HA MET 1 21.472 3.545 17.955 1.00 0.00 H
ATOM 10 HB2 MET 1 22.788 3.567 15.838 1.00 0.00 H
ATOM 11 HB3 MET 1 22.004 2.033 15.394 1.00 0.00 H
ATOM 12 HG2 MET 1 19.813 3.133 15.439 1.00 0.00 H
ATOM 13 HG3 MET 1 20.589 4.667 15.900 1.00 0.00 H
ATOM 14 HE1 MET 1 23.144 4.895 14.173 1.00 0.00 H
ATOM 15 HE2 MET 1 22.536 5.694 12.704 1.00 0.00 H
ATOM 16 HE3 MET 1 21.939 6.198 14.303 1.00 0.00 H
ATOM 17 H1 MET 1 22.632 1.159 18.243 1.00 0.00 H
ATOM 18 H2 MET 1 23.105 2.667 18.689 1.00 0.00 H
ATOM 19 H3 MET 1 23.471 2.005 17.112 1.00 0.00 H
从该文件中,我需要删除最后一列,在输出的其余列之间保持相同数量的空格: 标题NpXynWT_apo_300K_0001_琥珀色
ATOM 1 N MET 1 22.849 2.086 17.904 1.00 0.00
ATOM 2 CA MET 1 21.710 2.631 17.411 1.00 0.00
ATOM 3 C MET 1 20.525 1.737 17.578 1.00 0.00
ATOM 4 O MET 1 20.530 0.650 17.113 1.00 0.00
ATOM 5 CB MET 1 21.878 2.974 15.929 1.00 0.00
ATOM 6 CG MET 1 20.710 3.743 15.334 1.00 0.00
ATOM 7 SD MET 1 20.954 4.142 13.593 1.00 0.00
ATOM 8 CE MET 1 22.272 5.350 13.704 1.00 0.00
ATOM 9 HA MET 1 21.472 3.545 17.955 1.00 0.00
ATOM 10 HB2 MET 1 22.788 3.567 15.838 1.00 0.00
ATOM 11 HB3 MET 1 22.004 2.033 15.394 1.00 0.00
ATOM 12 HG2 MET 1 19.813 3.133 15.439 1.00 0.00
ATOM 13 HG3 MET 1 20.589 4.667 15.900 1.00 0.00
ATOM 14 HE1 MET 1 23.144 4.895 14.173 1.00 0.00
ATOM 15 HE2 MET 1 22.536 5.694 12.704 1.00 0.00
ATOM 16 HE3 MET 1 21.939 6.198 14.303 1.00 0.00
ATOM 17 H1 MET 1 22.632 1.159 18.243 1.00 0.00
ATOM 18 H2 MET 1 23.105 2.667 18.689 1.00 0.00
ATOM 19 H3 MET 1 23.471 2.005 17.112 1.00 0.00
我想我需要一些SED函数来指示分隔符的类型(空格数),列号(最后一个)。是否存在一些通用解决方案,这些解决方案将始终删除任意数量的前导空格的最后一列?
答案 0 :(得分:1)
$ sed 's/ *[^ ]* *$//' file
ATOM 1 N MET 1 22.849 2.086 17.904 1.00 0.00
ATOM 2 CA MET 1 21.710 2.631 17.411 1.00 0.00
ATOM 3 C MET 1 20.525 1.737 17.578 1.00 0.00
ATOM 4 O MET 1 20.530 0.650 17.113 1.00 0.00
ATOM 5 CB MET 1 21.878 2.974 15.929 1.00 0.00
ATOM 6 CG MET 1 20.710 3.743 15.334 1.00 0.00
ATOM 7 SD MET 1 20.954 4.142 13.593 1.00 0.00
ATOM 8 CE MET 1 22.272 5.350 13.704 1.00 0.00
ATOM 9 HA MET 1 21.472 3.545 17.955 1.00 0.00
ATOM 10 HB2 MET 1 22.788 3.567 15.838 1.00 0.00
ATOM 11 HB3 MET 1 22.004 2.033 15.394 1.00 0.00
ATOM 12 HG2 MET 1 19.813 3.133 15.439 1.00 0.00
ATOM 13 HG3 MET 1 20.589 4.667 15.900 1.00 0.00
ATOM 14 HE1 MET 1 23.144 4.895 14.173 1.00 0.00
ATOM 15 HE2 MET 1 22.536 5.694 12.704 1.00 0.00
ATOM 16 HE3 MET 1 21.939 6.198 14.303 1.00 0.00
ATOM 17 H1 MET 1 22.632 1.159 18.243 1.00 0.00
ATOM 18 H2 MET 1 23.105 2.667 18.689 1.00 0.00
ATOM 19 H3 MET 1 23.471 2.005 17.112 1.00 0.00
*
匹配零个或多个空格,[^ ]*
匹配零个或多个字符(空格除外)s/regexp/replacement/
与输入行匹配regexp
,并将匹配的子字符串替换为replacement
。示例中有尾随空格,并且上述命令也将其删除。如果您的实际输入中没有输入,请使用:
sed 's/ *[^ ]*$//' file
如果这些尾随空格实际上是回车符(即您的输入具有Windows行尾):
sed 's/ *[^ ]*\r$//' file
答案 1 :(得分:1)
这适用于gnu sed:
sed -r 's/\s+\S+$//' file
答案 2 :(得分:1)
如果d
文件中的数据,请尝试使用gnu sed:
sed -E 's/(.*)\s*\S+\s*/\1/' d
在gnu awk上尝试过:
awk -F' *' '{l=gensub(/(.*)\s\S+\s*$/,"\\1",1);print l}' d