Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么windows文件会影响某些awk功能,而其他功能不会_Awk - Fatal编程技术网

为什么windows文件会影响某些awk功能,而其他功能不会

为什么windows文件会影响某些awk功能,而其他功能不会,awk,Awk,我有一个文件如下 cat foo.txt N N N N N N N N I-MB I-MB 我想输出那些第1列不等于第2列的行,所以我使用awk来实现它 cat foo.txt | awk '$1 != $2' N N N N N N 但奇怪的是,它不起作用 原因是它是由windows生成的 file foo.txt foo.txt: ASCII text, with CRLF, LF line terminators 将其转换为unix格式后,它就可以工作了 sed -e 's/^M$

我有一个文件如下

cat foo.txt
N N
N N
N N
N N
I-MB I-MB
我想输出那些第1列不等于第2列的行,所以我使用awk来实现它

cat foo.txt | awk '$1 != $2'
N N
N N
N N
但奇怪的是,它不起作用

原因是它是由windows生成的

file foo.txt
foo.txt: ASCII text, with CRLF, LF line terminators
将其转换为unix格式后,它就可以工作了

sed -e 's/^M$//' foo.txt > foo2.txt
file foo2.txt
foo2.txt: ASCII text
那么为什么
CRLF
会影响一些awk函数,而其他函数不会?e、 g

head foo.txt | awk '$1 !~ /N/'
I-MB I-MB

I-MB I-MB

所有awk功能完全不受影响,它们完全按照设计工作。您缺少的一点是,当您的输入行是(CR=
\r
和LF=
\n
)时:

并且您的RS值是UNIX默认值
\n
,awk中正在处理的
$0
字符串是:

N N\r
所以$2(
N\r
)并不等于$1(
N

如果您设置了
RS=“\r\n”
(仅对多字符RS进行gawk),则
$0
将是:

N N
显然$2等于$1,但通常的建议是在输入文件上运行dos2unix或类似工具,然后再在其上运行任何UNIX工具

N N