다음 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
printf
C 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
) .mawk
awk
awk -v RS='\r\n' -v ORS= 1 < mycsv.csv
또는:
awk -v RS='\r?\n' -n ORS= 1 < mycsv.csv
즉, \r
Unix 또는 MS-DOS 줄 구분 기호를 처리하도록 선택할 수 있습니다.
dos2unix
또는 먼저 또는 같은 것을 사용하여 d2u
파일을 Unix 형식으로 변환합니다 .
노트
형식 매개변수 1개가printf
필요합니다.awk
공공 시설에 대한 표준 사양. 입력 gawk
하고 mawk
생략하면 오류가 발생합니다. busybox
awk
원래 구현(예: on )에서 파생된 에서는 printf ""
동일합니다(여전히 형식으로 간주되고 문자가 포함된 경우 오류가 발생하므로 그다지 유용하지 않습니다).awk
macOS
printf $0
$0
%