我有 2 个 csv/双引号分隔的文件。文件 26 中的第 1 列和文件 2 中的第 2 列都包含域,如果我运行以下内容
awk -F'"' '{print $26}' file1.csv
awk -F'"' '{print $2}' file2.txt
然后我可以看到文件 1 有 6 个域,文件 2 有 3 个域。
文件2 中的所有域也在文件 1 中。
如果文件 2 中的第 2 列与文件 2 中的第 1 列匹配,我想生成一个新文件,其中包含文件 1 中的所有列以及文件 2 中的所有列。
另外,我很确定第 26 列始终是文件 1 中的最后一列,但文件 2 可以有任意数量的列。
有谁知道我如何在 bash、awk、sed 或类似情况下做到这一点?
尝试:
awk -F'"' 'FNR==NR{A[$26]=$0;next} ($2 in A){print A[$2] FS $0}' file1 file2
所以在这里我检查 FNR==NR 条件,该条件仅在读取第一个文件 file1 时才为 TRUE,然后创建一个名为 A 的数组,其索引为 $26 字段并将其值设置为当前行并放置 next 将跳过所有进一步的语句。然后检查 file2 的 $2 是否存在于文件1的数组A中,然后用当前行的值打印数组A的值。
请提供样品Input_file和预期输出,以防上述情况不符合您的要求。