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
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