2017-08-17 10 views
0

私は私が欲しいなぜWindowsのファイルは、いくつかのawkの機能が、他の人に影響を与える可能性がない

cat foo.txt 
N N 
N N 
N N 
N N 
I-MB I-MB 

以下のようにファイルを持っている第一列が等しい第二列ではありませんので、私はそれ

を実装するためにawkを使用し、それらの行は、
cat foo.txt | awk '$1 != $2' 
N N 
N N 
N N 

非常に奇妙なことに動作しません。

理由は、それが動作するUNIX形式に変換した後のウィンドウ

file foo.txt 
foo.txt: ASCII text, with CRLF, LF line terminators 

によって生成されるということです。

sed -e 's/^M$//' foo.txt > foo2.txt 
file foo2.txt 
foo2.txt: ASCII text 

なぜCRLF一部のawkの機能に影響を与える可能性があるが、他のではありませんか?例えば

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

I-MB I-MB 

答えて

1

すべてのawk関数は完全に影響を受けず、設計どおりに動作します。

N N\r\n 

とあなたのRS値は、UNIXのデフォルト\nで、awkの中に処理されている$0文字列は次のとおりです:

あなたが不足している点は、あなたの入力行が(CR = \rとLF = \n)であるときということです
N N\r 

ですので、$ 2(N\r)は単純に$ 1(N)に等しくありません。

あなたは、$0のようになりRS="\r\n"(gawkの専用マルチcharのRS)を設定した場合:

N N 

、その後明らかに$ 2は$ 1に等しいですが、通常のアドバイスはただのDOS2UNIXまたは類似を実行することですあなたの入力ファイルにUNIXツールを実行する前に。

関連する問題