我发现了与我类似的问题,但没有人帮我解决我的具体问题(而且我不确定是否真的有这么简单的解决方案......)
我有两个文件:
文件1:
a b c
d e f
g h i
file2的:
a b x y z
d e x
f h i
期望的输出:
a b c x y z
d e f x
g h i
所以,我想要文件1中的所有行和列,另外,如果文件2中的前两列匹配,我想将其余列(从文件2)附加到其中文件1并将其写入新文件。
我尝试过使用awk但是到目前为止我只设法为那些匹配的行追加列,但是其他的(在我的例子中是“g,h,i”行)没有打印。 另一个问题似乎是文件2中的项目并不总是具有相同数量的列。
有没有人知道如何解决这个问题?
谢谢!
答案 0 :(得分:0)
使用以下方法:
awk 'FNR==NR{k=$1$2; $1=$2=""; a[k]=$0; next}
{ if($1$2 in a){print $0a[$1$2] } else print $0}' file2 file1 | tr -s ' '
输出:
a b c x y z
d e f x
g h i
FNR==NR
- 确保执行第一个文件
k=$1$2;
- k
是关联数组的一个键,它会累积第二个文件中除前两列之外的所有列值(因为它们变为键/哈希)。对于前者对于第一个file2
行,数组将被编入索引为a['ab']='x y z'
答案 1 :(得分:0)
这是另一个SELECT pr_products.product AS PRODUCT,
pr_varieties.variety AS VARIETY,
FORMAT(SUM(IF(pr_grades.grade='GOLD',pf_harvest.quantity,0)),0) AS GOLD,
SUM(IF(pr_grades.grade='NORMAL',pf_harvest.quantity,0)) AS NORMAL,
SUM(pf_harvest.quantity) AS TOTAL
FROM pf_harvest
INNER JOIN pf_performance ON pf_performance.id = pf_harvest.id_performance
INNER JOIN pr_products ON pr_products.id = pf_harvest.id_product
INNER JOIN pr_varieties ON pr_varieties.id = pf_harvest.id_variety
INNER JOIN pr_grades ON pr_grades.id = pf_harvest.id_grade
WHERE pf_performance.status = 100
AND pf_harvest.id_tenant = 1
AND pf_harvest.date = CURDATE()
GROUP BY pf_harvest.id_product, pf_harvest.id_variety
ORDER BY pf_harvest.id_product, pr_varieties.variety, pf_harvest.id_grade
awk
记下文件的顺序。