我必须在第四列后插入一列带有字符“A”。
每行新行前必须正好有 80 个字符(包括空格);如果没有,我们可以添加空格来均衡。我必须对大量文件执行此操作。
单个文件的示例表示:
前:
ATOM 558 O VAL 86 -12.863 -8.701 -49.495 1.00 64.57 O
ATOM 560 CA VAL 87 -13.628 -10.486 -47.550 1.00 58.11 C
.....
.....
.....
后:
ATOM 558 O VAL A 86 -12.863 -8.701 -49.495 1.00 64.57 O
ATOM 560 CA VAL A 87 -13.628 -10.486 -47.550 1.00 58.11 C
.......
.......
答案1
也许您可以只替换第 5 列中的一个空格?
$ sed 's/ / A/5' file
ATOM 558 O VAL A 86 -12.863 -8.701 -49.495 1.00 64.57 O
ATOM 560 CA VAL A 87 -13.628 -10.486 -47.550 1.00 58.11 C
您可以将多个文件名传递给,只需使用类似或任何可以捕获您想要编辑的文件的sed
shell glob 。*.txt
测试后使用该-i
标志来修改文件。
这不会改变每行的字符数...如果您需要将行填充到 80 个字符,则可以使用类似
sed 's/ / A/5' file | awk '{printf "%-80s\n", $0}'
答案2
使用perl
:
perl -lane '$"="\t"; print sprintf("%-80s", "@F[0..3]\tA\t@F[4..10]");' file
输出:
ATOM 558 O VAL A 86 -12.863 -8.701 -49.495 1.00 64.57 O
ATOM 560 CA VAL A 87 -13.628 -10.486 -47.550 1.00 58.11 C
要检查长度是否正好是“80”,请将输出传递给awk '{ print length($0), "->", $0 }'
:
$ perl ... | awk '{ print length($0), "->", $0 }'
80 -> ATOM 558 O VAL A 86 -12.863 -8.701 -49.495 1.00 64.57 O
80 -> ATOM 560 CA VAL A 87 -13.628 -10.486 -47.550 1.00 58.11 C