sudo_O のコメントに応えてawk
、純粋な bash に少ないソリューションを追加します。プログラムをまったく実行しません。もちろん、<<XXX ... XXX
(ドキュメントはこちら) の代わりに を追加でき<filename
ます。
set c=""
while read w; do
echo -e "$c'$w'\c"
c=,
done<<XXX
abc
def
ghi
jkl
mno
XXX
出力:
'abc','def','ghi','jkl','mno'
さらに短いバージョン:
printf -v out ",'%s'" $(<infile)
echo ${out:1}
恐ろしいパイプヘビなしで、次のようなことを試すことができます:
awk 'NR>1{printf ","}{printf "\x27%s\x27",$0}' <<XXX
abc
def
ghi
jkl
mno
XXX
出力:
'abc','def','ghi','jkl','mno'
または、入力全体を 1 行として読み取る別のバージョン:
awk -vRS="" '{gsub("\n","\x27,\x27");print"\x27"$0"\x27"}'
または、awk が内部変数をより多く使用できるようにするバージョン
awk -vRS="" -F"\n" -vOFS="','" -vORS="'" '{$1=$1;print ORS $0}'
新しいフィールドとレコードの区切り文字 ( , ) を使用して再パック$1=$1;
するように に指示する必要があります。awk
$0
OFS
ORS