每列33行6列增加1

时间:2015-08-10 18:15:37

标签: python shell awk

我有以下类型的文件,

ATOM      4  C4  UNK X   1       7.747   4.310   5.563  1.00  0.00           C
ATOM      5  C5  UNK X   1       8.900   3.705   6.021  1.00  0.00           C
ATOM      6  C6  UNK X   1       9.622   2.872   5.185  1.00  0.00           C

- 最多3564行。

我想每33行将第六列增加1。我之前看过帖子并找到了这段代码,

gawk -v n=1 '
match($0,/^(.{22})....(.*)/, f) {printf "%s%4d%s\n", f[1], n, f[2]}
NR % 20 == 0 {n++}
{print}
' file

上述文件的输出是:

ATOM   3556  H10 UNK X 178      30.121  19.518  46.272  1.00  0.00           H
ATOM   3556  H10 UNK X   1      30.121  19.518  46.272  1.00  0.00           H

可以建议我,如何每33行增加第六列?

4 个答案:

答案 0 :(得分:1)

这可能就足够了:

awk '{$6=int(NR/33)+1}1' input.txt

这将使用基于行号的整数替换字段6。表达有点明显。 +1就在那里,因为,例如,在第21行,NR / 33 = 0.6363,int()截断为零。

“脚本”末尾的尾随1打印该行,因为它的计算结果为“true”,而在awk中,缺少的语句默认为{print}

请注意,在awk中,每当您更改字段数据时,awk都会重新处理该行以减少空格,将所有字段分隔符替换为OFS

答案 1 :(得分:0)

这可能是你想要的,但没有可测试的样本输入和预期输出,我们只是在猜测:

$result = odbc_exec ($conn,$stmt);
echo "Result1: ";
var_dump( $result );
if($result)
{
    var_dump( odbc_error($conn)    );    
    var_dump( odbc_errormsg($conn) );
}

例如:

awk '{$6+=val; print} !(NR%33){++val}' file

答案 2 :(得分:0)

如果只想增加第(33 * n)行,可以这样做。

awk '!(NR%33){$6+=++p} 1'

第33行将增加1,第66行增加2,等等。

答案 3 :(得分:-1)

我将为您提供Python代码,安装Python 3.4以运行它。

import shutil
import os
with open("full_path_to_file", "r") as f, open("a.csv", "a") as w:
    count = 2
    l = next(f)
    l = l.split(",")
    l = str(int(l[5]) + 1)
    w.append(','.join(l))
    for line in f:
        if count % 33 != 0 or count <= 33:
            count += 1
            w.write(line)
        line = line.split(",")
        line[5] = str(int(line[5]) + 1)
        w.write(','.join(line))
       count += 1
    shutil.move(w.name, f.name)
    os.remove(w.name)