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

时间:2016-11-24 15:31:13

标签: awk

我有以下代码

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

1 个答案:

答案 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,例如:

  • Mac:brew install dos2unix
  • Linux:apt-get install dos2unix