コンマがあってはならない最後の行を除いて、各行を一重引用符/二重引用符で囲み、コンマで終わるにはどうすればよいですか?

コンマがあってはならない最後の行を除いて、各行を一重引用符/二重引用符で囲み、コンマで終わるにはどうすればよいですか?

一重引用符/二重引用符で囲み、カンマで終わりたいです。ただし、最後のレコードであるため、最後の行にカンマを含めないようにすることも必要です。

同じ要件を持つ複数の投稿が見つかりましたが、最後の行を除外した投稿が見つかりませんでした。

以下は私が保存したサンプルデータです。/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"

おすすめ記事