작은따옴표/큰따옴표로 묶고 쉼표로 끝내고 싶습니다. 하지만 마지막 레코드이기 때문에 마지막 줄에 쉼표가 포함되지 않도록 하는 것도 필요합니다.
동일한 요구 사항을 가진 여러 게시물을 찾았지만 마지막 줄을 제외하는 게시물을 찾을 수 없습니다.
아래는 제가 저장한 샘플 데이터입니다./tmp/x
ANONYMOUS
APEX_040200
APEX_PUBLIC_USER
APPQOSSYS
AUDSYS
아래에서 원하는 출력은 작은따옴표로 묶여 있습니다. 나중에 큰따옴표를 사용해야 할 수도 있습니다.
'ANONYMOUS',
'APEX_040200',
'APEX_PUBLIC_USER',
'APPQOSSYS',
'AUDSYS'
다음을 사용할 수 있지만 마지막 줄이 작은따옴표/큰따옴표로 묶이도록 만드는 방법을 모르겠습니다.하지만 쉼표는 없어.
awk '{ printf "'\''%s'\'',\n", $0 }' /tmp/x ## single-quote
awk '{ printf "\"%s\",\n", $0 }' /tmp/x ## double-quote
따라서 결과 출력은 다음과 같습니다. 마지막 레코드의 쉼표를 참고하세요.
"ANONYMOUS",
"APEX_040200",
"APEX_PUBLIC_USER",
"APPQOSSYS",
'ANONYMOUS',
'APEX_040200',
'APEX_PUBLIC_USER',
'APPQOSSYS',
,
마지막 줄의 후행을 억제하는 방법은 무엇입니까 ?
답변1
awk를 사용하십시오.
$ awk -v q=\' -v ORS= '{print s q $0 q; s=","RS} END{print RS}' file
'ANONYMOUS',
'APEX_040200',
'APEX_PUBLIC_USER',
'APPQOSSYS',
'AUDSYS'
또는 작은 따옴표 대신 큰 따옴표를 사용하려면 다음과 같이 변경 -v q=\'
하십시오 -v q=\"
.
$ awk -v q=\" -v ORS= '{print s q $0 q; s=","RS} END{print RS}' file
"ANONYMOUS",
"APEX_040200",
"APEX_PUBLIC_USER",
"APPQOSSYS",
"AUDSYS"
답변2
다음 awk
절차가 작동합니다.
awk 'FNR>1{printf ",\n"} {printf "\047%s\047",$0} END{printf "\n"}' input.txt
이것은 것이다
- 첫 번째 입력 줄을 처리할 때 다른 것보다 먼저 쉼표와 개행 문자를 인쇄하여 "이전 줄"을 종료합니다.
- 작은따옴표로 묶인 현재 줄의 내용을 인쇄합니다(8진수 ASCII 코드), 하지만아니요쉼표 또는 개행(어느 것이 필요한지 아직 모르기 때문에)
- 파일 끝에서 마지막 입력 라인에 해당하는 출력을 종료하는 개행 문자만 인쇄합니다.
답변3
AWK로 가야 하나요? sed를 사용하면 마지막 줄을 직접 확인할 수 있으므로( $
)를 사용하여 마지막 쉼표를 제거할 수 있습니다 $s/,$//
.
또는 따옴표와 쉼표를 완전히 추가하고 마지막 줄에서 쉼표를 제거합니다.
% sed -e "s/.*/'&',/" -e '$s/,$//' file.txt
'ANONYMOUS',
'APEX_040200',
'APEX_PUBLIC_USER',
'APPQOSSYS',
'AUDSYS'
또는 쉘 변수를 사용하여 따옴표 문자를 저장하면 다음을 사용하여 작은 따옴표로 바꿀 수 있습니다 q=\'
.
% q=\"
% sed -e "s/.*/$q&$q,/" -e '$s/,$//' file.txt
'ANONYMOUS',
'APEX_040200',
'APEX_PUBLIC_USER',
'APPQOSSYS',
'AUDSYS'