我有以下代码
awk -F ',' 'NR==FNR { a[$1]=$1; next}; $4 in a {print $0};' FileA FileB
FileA
a,1
ab,2
FILEB
FieldA,FieldB,FieldC,FieldD
a,1,2,ab
a,1,4,c
b,1,2,ab
ab,1,3,d
该文件没有返回任何内容。
预期产出
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一起工作了大约两个星期,仍然对这种语言感到很困惑..
EDIT1: GNU Awk 4.1.0,API:1.0
答案 0 :(得分:2)
这是一个Windows行结束问题,与AWK版本无关。这就是为什么第一次调用什么都不返回。
首先修复您的文件(将所有\r\n
更改为\n
):
$ 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
安装dos2unix
,例如:
brew install dos2unix
apt-get install dos2unix