使用命令行工具对两个不同文件进行列操作

时间:2017-02-02 21:56:59

标签: python bash awk

我正在尝试编写一个脚本,该脚本提取两个相似数据集的已更改列,这些数据集存储为两个不同文件中的表格数据。这是一个例子:

启动file1.txt的数据:

COLUMN_1 COLUMN_2 COLUMN_3 
-------- -------- -------- 
Value_1  Value_2  Value_3

更改了file2.txt的数据:

COLUMN_1 COLUMN_2 COLUMN_3 
-------- -------- -------- 
Value_1  newValue Value_3  

结果数据:

COLUMN_2
--------
newValue 

您建议使用哪些工具?我在想awk或python?

更新: 犯了一个小错误,结果应显示newValue

2 个答案:

答案 0 :(得分:0)

awk救援!

$ paste file1 file2 | 
  awk 'NR==1 {split($0,h1)} 
       NR==2 {split($0,h2)} 
             {m=NF/2; 
              for(i=1;i<=m;i++) if($i!=$(i+m)) d[i]=$i;
              for(i=1;i<=m;i++) if(i in d) print h1[i]; 
              for(i=1;i<=m;i++) if(i in d) print h2[i]; 
              for(i=1;i<=m;i++) if(i in d) print d[i]}'

COLUMN_2
--------
Value_2

答案 1 :(得分:0)

Python中的涂鸦:

with open(fn1) as f1, open(fn2) as f2:
    head1, head2 = [next(fh).split() for fh in (f1, f2)]
    sep1, sep2 = [next(fh).split() for fh in (f1, f2)]
    v1, v2 = [next(fh).split() for fh in (f1, f2)]
    for i, (fi1, fi2) in enumerate(zip(v1, v2)):
        if fi1!=fi2:
            print('{}\n{}\n{}'.format(head2[i], sep2[i], fi2))

打印:

COLUMN_2
--------
newValue

但是,如果您的值和空格中含有空格,那么就会出现问题(如awk解决方案一样)。

如果您使用其他分隔符,请在此文件中更改.split('character_that_is_delimiter')(或者,更好的是,使用csv模块...)