输入:
File 1
col1 col2 col3 col4 col5 col6 col7
A 91 - E Abu 7 -
B 82 - f Anu 9 -
C 93 - G Aru 8 -
File 2
col1 col2 col3 col4 col5 col6 col7
A 91 - x Bob 7 -
B 82 - y Bag 9 -
C 93 - z Bui 8 -
File 3
col1 col2 col3 col4 col5 col6 col7
A 91 - T Can 7 -
B 82 - U Con 9 -
C 93 - V Cuu 8 -
预期输出:
col1 col2 col3 col4 col5
A 91 Abu Bob Can
B 82 Anu Bag Cun
C 93 Aru Bui Cuu
我有三个文件在col1和2处具有相同的数据。我需要打印所有文件的第五列以及前两列。 我能够使用两个文件。那么任何人都可以帮我处理三个或更多文件吗?
答案 0 :(得分:2)
以下是使用awk
的一种方式:
$ awk '
BEGIN {
SUBSEP = FS;
print "col1 col2 col3 col4 col5"
}
FNR>1 {
a[$1,$2] = (a[$1,$2]?a[$1,$2]FS$5:$5)
}
END {
for(x in a) print x, a[x]
}' file1 file2 file3
col1 col2 col3 col4 col5
C 93 Aru Bui Cuu
A 91 Abu Bob Can
B 82 Anu Bag Con
如果需要排序输出,可以将输出传递给sort
。 不限制为三个文件。它可以扩展到n
个文件。只需在末尾添加文件名,或使用*
对给定目录下的所有文件进行glob。
答案 1 :(得分:1)
假设由于这句话,所有三个文件都有相同的行数
我有三个文件在col1和2处具有相同的数据。
awk 'BEGIN{OFS="\t";
getline<"file1";getline<"file2";getline<"file3";
print "col1","col2","col3","col4","col5";
while(1) {getline < "file1";a=$1;b=$2;c=$5;getline<"file2";d=$5;f=getline<"file3";e=$5;
if(!f)exit;print a,b,c,d,e}}'
输出:
col1 col2 col3 col4 col5
A 91 Abu Bob Can
B 82 Anu Bag Con
C 93 Aru Bui Cuu
这将丢弃每个文件的第一行,然后逐行读取文件,打印所需的字段。