awk printf의 예기치 않은 출력

awk printf의 예기치 않은 출력

다음 CSV 파일이 있습니다.

$ cat mycsv.csv 
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  

다음은 왜 모든 줄을 인쇄하지 않습니까?

$awk -F "," '{printf}' mycsv.csv    
 ","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N””  

$awk -F "," '{printf $0}' mycsv.csv 
 ","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N””  

둘 다 모든 줄을 인쇄해야 합니다. 그렇죠? 내가 뭘 잘못했나요?

답변1

printfC printf()또는 printf유틸리티 또는 awk' 의 첫 번째 인수에는 1이printf() 필요하며 다음과 같습니다.체재.

당신이 원하는 것:

awk '{printf "%s", $0}'

여기. 레코드 구분 기호를 출력할 필요가 없으면 다음을 수행할 수도 있습니다.

awk -v ORS= '{print}' < mycsv.csv

심지어:

awk -v ORS= 1 < mycsv.csv

( {print}이것은 기본 작업입니다.진짜기본 조건이지만 최소한 하나의 작업이나 조건을 지정해야 합니다 1.진짜).

하지만 여기서는 tr충분합니다.

tr -d '\n' < mycsv.csv

아니면 아직도 원한다면하나출력이 여전히 텍스트가 되도록 후행 개행:

paste -sd '\0' mycsv.csv

파일에는 Microsoft 스타일의 CRLF 줄 구분 기호도 있는 것으로 나타나므로 CR 문자도 제거하는 것이 좋습니다.

tr -d '\r\n' < mycsv.csv

awk또는 여러 단일 문자 구현을 지원하는 CRLF 시퀀스를 사용하십시오 RS( macOS 포함 gawk) .mawkawk

awk -v RS='\r\n' -v ORS= 1 < mycsv.csv

또는:

awk -v RS='\r?\n' -n ORS= 1 < mycsv.csv

즉, \rUnix 또는 MS-DOS 줄 구분 기호를 처리하도록 선택할 수 있습니다.

dos2unix또는 먼저 또는 같은 것을 사용하여 d2u파일을 Unix 형식으로 변환합니다 .

노트

형식 매개변수 1개가printf 필요합니다.awk공공 시설에 대한 표준 사양. 입력 gawk하고 mawk생략하면 오류가 발생합니다. busybox awk원래 구현(예: on )에서 파생된 에서는 printf ""동일합니다(여전히 형식으로 간주되고 문자가 포함된 경우 오류가 발생하므로 그다지 유용하지 않습니다).awkmacOSprintf $0$0%

관련 정보