根据前一列添加2列

时间:2015-10-13 12:16:43

标签: python awk sed

我有一个带有4列的制表符分隔文件。第2列和第3列有数字。

enter image description here

我想用第二列2条目加上第一列第3列并在第二列2的位置打印,然后将该结果与第二列3条目相加并在第二列3位置打印,并将此结果与第三列2条目相加并在第三列2处打印,依此类推。预期结果将是:

enter image description here

2 个答案:

答案 0 :(得分:0)

以下Python解决方案应该有效:

import csv

def convert(row):
    for col in [1, 2]:
        row[col] = int(row[col])
    return row

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:  
    csv_input = csv.reader(f_input, delimiter='\t')
    csv_output = csv.writer(f_output, delimiter='\t')

    last = convert(next(csv_input))
    csv_output.writerow(last)

    for cols in csv_input:
        cols = convert(cols)
        cols[1] = cols[1] + last[2]
        cols[2] = cols[1] + cols[2]
        csv_output.writerow(cols)
        last = cols

为您提供output.csv文件,如下所示:

A1  1   2   a1
B1  5   9   b1
C1  14  20  c1

答案 1 :(得分:0)

你没有要求Tcl代码,但这是一种方法。它可能更漂亮,但它的工作原理。

set data {
A1  1   2   a1
B1  3   4   b1
C1  5   6   c1
}

set ns {}
foreach {- a b -} $data {
    lappend ns $a $b
}

set a 0
set xs 1
foreach n [lrange $ns 1 end] {
    lappend xs [incr a $n]
}

foreach {a b} $xs r {a b c} {
    puts "[string toupper $r]1\t$a\t$b\t${r}1"
}