2012-08-17 47 views
1

我想从两个不同目录的文本文件中提取column1和column7。这些目录中的文件名称相同。我需要将输出保存到另一个目录。用bash,awk或sed从多个文件中提取多列

file1.txt in D1 directory 

column1 column2 column3 column7 
david 45.2  14.6 45.0 
grecy 12.0  0.0 12.0 
anjal 23.2  321.0 34.5 

file1.txt in D2 directory 

column1 column2 column3 column7 
david 45.2  14.6 56.0 
grecy 10.0  0.0 12.0 
moha  23.1  321.0 334.5 

output format (save the output as file1.txt in D3 directory) 

column1 column1 column7 column7 
david  david 45.0 56.0 
grecy  grecy 12.0 12.0 
anjal  moha  34.5 334.5 

您的意见将不胜感激。

回答

3

一个快速的方法使用pasteawk

paste D1/file1.txt D2/file1.txt | awk '{ printf "%s\t%s\t%s\t%s\n", $1, $5, $4, $8 }' > D3/file1.txt 

结果:

column1 column1 column7 column7 
david david 45.0 56.0 
grecy grecy 12.0 12.0 
anjal moha 34.5 334.5 

编辑:要处理多个文件,你可以使用bash的循环:

for i in D1/*.txt; do paste "$i" D2/${i/D1\//} | awk '{ printf "%s\t%s\t%s\t%s\n", $1, $5, $4, $8 }' > D3/${i/D1\//}; done 
+0

感谢您的回答。您的代码仅适用于单个文件。你能提供多个文件的代码吗? – user1606106 2012-08-17 07:25:48

+0

@ user1606106:我已经更新了处理多个文件的答案。 HTH。 – Steve 2012-08-17 10:58:19

+0

太棒了!谢谢。 – user1606106 2012-08-18 02:29:39

0
awk '{ 
    a1=$1;b1=$4; 
    getline <"D2/file1.txt"; 
    print a1,$1,b1,$4 
}' D1/file1.txt >D3/file1.txt 
0
join -j 1 -o 1.1,2.1,1.7,2.7 <(D1/file1.txt | sort -k1,1) <(sort -k1,1 D2/file1.txt) > D3/file1.txt