Awk 如何判断在bash中引用/使用了哪个文件?

Awk 如何判断在bash中引用/使用了哪个文件?,awk,Awk,我有以下代码 awk -F ',' 'NR==FNR { a[$1]=$1; next}; $4 in a {print $0};' FileA FileB 菲拉 a,1 ab,2 文件 这个文件什么也没给我 预期产量 a,1,2,ab b,1,2,ab 但是,如果我将代码更改为 awk -F ',' 'NR==FNR { a[$1]=$1; next}; $1 in a {print $0};' FileA FileB 它在FileB中返回数据 a,1,2,ab a,1,4,c ab,

我有以下代码

awk -F ',' 'NR==FNR { a[$1]=$1; next}; $4 in a {print $0};' FileA FileB
菲拉

a,1
ab,2
文件

这个文件什么也没给我

预期产量

a,1,2,ab
b,1,2,ab
但是,如果我将代码更改为

awk -F ',' 'NR==FNR { a[$1]=$1; next}; $1 in a {print $0};' FileA FileB
它在FileB中返回数据

a,1,2,ab
a,1,4,c
ab,1,3,d
这是怎么回事。。。我已经和bash一起工作了大约两周,仍然对这种语言感到困惑

编辑1:
GNU Awk 4.1.0,API:1.0

这是一个Windows行结束问题,与Awk版本无关。这就是为什么第一次调用什么也不返回

首先修复文件(将所有
\r\n
更改为
\n
):

然后

将产生预期产出:

a,1,2,ab
b,1,2,ab

用于安装
dos2unix
,例如:

  • Mac:
    brew安装dos2unix
  • Linux:
    apt get install dos2unix

如何在输出中获得“b,1,2,ab”?虽然
awk
常用于
bash
,但这些问题似乎是关于
awk
如何工作,而不是
bash
本身。您有什么版本的
awk
?我看不到与我的
gawk
报告相同的输出,尽管如前所述,这不是关于
bash
,这是关于
awk
,那么您有什么版本的,请编辑您的问题,将其包括在内,而不是将信息添加到评论中。请发布
awk--version
输出的第一行。在我的例子(GNU Awk 4.1.3)中,程序会精确地生成预期的输出。仅供参考,Awk总是按顺序处理所有输入文件,
NR==FNR{…next}…
只是将第一个动作(
a[$1]=$1
)仅应用于第一个文件和第二个模式/动作对(
$4 In a{print$0}
)只有第二个文件。
$ dos2unix FileA
$ dos2unix FileB
$ awk -F ',' 'NR==FNR { a[$1]=$1; next}; $4 in a {print $0};' FileA FileB
a,1,2,ab
b,1,2,ab