2016-06-01 6 views
-1
에 열을 겹쳐 보인다

[사소한] [이 해결]AWK 초래할

TL : DR - DOW CRLF AWK가 오작동하는 것처럼 느끼게했다; 사소한 실수!

왜 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

도스 라인 터미네이터? – tripleee

+0

@ 동호회 - 네! 지금 그것을 알아 냈어! 감사! – raghava

답변

3

으로는 tripleee 지적,이 문제로 인해 DOS 라인 종결 가능성, 간단한 수정 tr를 사용하여 특수 문자를 제거 및 처리를 위해 awk에 공급하기 위해 수 있습니다. 위의 예에서

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

tr -dc '[:print:]\n'awk에 공급하기 전에 입력 파일 만 가능한 문자를 허용한다.

+0

정확히! 이것도 알아 냈어. dos2ux를 실행 한 다음 고정시켜야합니다. 그 모습을 보아 왔음에 틀림 없다! :디 – raghava

0

파일이 도스 같은 환경에서 오는 경우 문제는, 라인의 끝에 존재하는 캐리지 리턴 (\r)가 될 수 있습니다.

gawk 유일한 해결책 일 수 있습니다.

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