쉼표가 없어야 하는 마지막 줄을 제외하고 각 줄을 작은따옴표/큰따옴표로 묶고 쉼표로 끝내려면 어떻게 해야 합니까?

쉼표가 없어야 하는 마지막 줄을 제외하고 각 줄을 작은따옴표/큰따옴표로 묶고 쉼표로 끝내려면 어떻게 해야 합니까?

작은따옴표/큰따옴표로 묶고 쉼표로 끝내고 싶습니다. 하지만 마지막 레코드이기 때문에 마지막 줄에 쉼표가 포함되지 않도록 하는 것도 필요합니다.

동일한 요구 사항을 가진 여러 게시물을 찾았지만 마지막 줄을 제외하는 게시물을 찾을 수 없습니다.

아래는 제가 저장한 샘플 데이터입니다./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'

답변4

출력을 다음으로 파이프합니다 sed.

awk '{ printf "\"%s\",\n", $0 }' /tmp/x | sed '$ s/.$//'

원천

관련 정보