使用bash,awk或sed从多个文件中提取多个列

时间:2012-08-17 06:46:56

标签: bash sed awk

我正在尝试从两个不同目录的文本文件中提取column1和column7。这些目录中的文件名相同。我需要将输出保存到另一个目录。

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

awk '{
     a1=$1;b1=$4;
     getline <"D2/file1.txt";
     print a1,$1,b1,$4
}' D1/file1.txt >D3/file1.txt

答案 2 :(得分: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