首页 > 解决方案 > 如何表示其他文件上的文件内容?

问题描述

我有 2 个大 .csv 文件。我想提取文件 1 中文件 2 的内容。

例如:

文件1:

A1BG    1
NAT1    9
NAT2    10
SERPINA3    12
AAMP    14
AANAT   15
AARS1   16

文件 2:

1 10422
1 10549
1 2232
1 23198
1 23352
1 284403
1 368
1 51035
1 80854
1 9923
2 10053
2 10376
2 10724
2 2026
2 2193
2 22976
2 23154
2 24138
2 2639
2 284207
2 285203
2 3337
2 3437
2 348
2 348
2 348
2 351
4 7689

输出:

1 10422
1 10549
1 2232
1 23198
1 23352
1 284403
1 368
1 51035
1 80854
1 9923

这是我的代码:

awk 'NR==FNR{FS=" ";a[$2];next}{FS=" ";if ($1 in a) print $0}' <file1.csv <file2.csv >output.csv

但我没有输出。

标签: csvawk

解决方案


让我们看看你的代码:

awk 'NR==FNR{FS=" ";a[$2];next}{FS=" ";if ($1 in a) print $0}' <file1.csv <file2.csv >output.csv

您正在重定向来自 2 个文件的输入。对于每个文件描述符,shell 只能有一个数据源:shell 处理从左到右的重定向,就像在命令行中看到的那样。尝试这个:

awk 'NR==FNR' <file1.csv <file2.csv

您可能会对 awk 认为的“第一个文件”感到惊讶。

awk 完全能够读取文件,您不需要 shell 来执行此操作:

awk 'NR==FNR' file1.csv file2.csv

推荐阅读