2016-06-01 13 views
-1
の列を上書きするようだ

[TRIVIAL] [解決しよう]awkは結果

TL:DR - DOW CRLFはawkのmisbehavedているかのように感じるように作られました。些細な間違い!

awk/gawkがこのように動作する理由がわかりません。何かヒント? awkの結果が端末のカラムを上書きするのを見たことはありますか?私はただ一つのマシンでこれを見ています。他のすべての場所で、ものはうまく動作します!ターミナルが誤動作しているのか、それとも他のものなのかはわかりません。 stty saneはどちらも役に立たないようです。誰も似たようなことを見た?

$ cat in.txt 
2132088 AAA_WEB_50181_552222195-1 
2110665 AAA_WEB_50177_547796499-2 
2157591 AAA_WEB_50181_551310844-1 
2117370 AAA_WEB_50178_549250104-1 
2109777 AAA_WEB_50180_551512637-1 
2112704 AAA_WEB_50179_410838823-13 
2116984 AAA_WEB_50178_549463801-2 
2119511 AAA_WEB_50179_550076677-2 
2122008 AAA_WEB_50180_551679428-1 
2124984 AAA_WEB_50177_548026293-1 
$ awk '{print $2 " " $1}' in.txt 
213208850181_552222195-1 
211066550177_547796499-2 
215759150181_551310844-1 
211737050178_549250104-1 
210977750180_551512637-1 
211270450179_410838823-13 
211698450178_549463801-2 
211951150179_550076677-2 
212200850180_551679428-1 
212498450177_548026293-1 
$ cat /etc/issue.net 
Ubuntu 14.04.4 LTS 
$ gawk '{print $2 " " $1}' in.txt 
213208850181_552222195-1 
211066550177_547796499-2 
215759150181_551310844-1 
211737050178_549250104-1 
210977750180_551512637-1 
211270450179_410838823-13 
211698450178_549463801-2 
211951150179_550076677-2 
212200850180_551679428-1 
212498450177_548026293-1 
$ gawk -W version 
GNU Awk 4.0.1 
Copyright (C) 1989, 1991-2012 Free Software Foundation. 

スクリーンショット:awk or terminal - misbehaviour

+3

DOSラインターミネータ? – tripleee

+0

@treeplee - うん!ちょうど今それを考え出してください!ありがとう! – raghava

答えて

3

としてはtripleeeによって指摘、問題が原因DOSの行末に可能性があり、簡単な修正はtrを使用して、特殊な文字を削除し、処理のためにawkにそれを養うためにある可能性があります。上記の例で

cat in.txt | tr -dc '[:print:]\n' | gawk '{print $2 " " $1}' 

tr -dc '[:print:]\n'awkにそれを供給する前に、入力ファイルからのみ印刷可能文字を可能にします。

+0

まさに!これも同様に考え出される。 dos2uxを実行して、それを修正しました。それが来るのを見たことがあります! :D – raghava

0

ファイルは、DOSのような環境から来ている場合、問題は、ラインの末端に存在するキャリッジリターン(\r)であってもよいです。

gawk解決策のみです。

gawk '{printf "%s %s\n",gensub(/\r$/,"",-1,$2),$1}' in.txt