単語リストを1行にまとめて文字を追加します。

単語リストを1行にまとめて文字を追加します。

たとえば、各行の単語リストを含むファイルを取得したいとします。

act
bat
cat
dog
eel

そして一行にリストし、カンマで区切って引用してください。結果は次のとおりです。

'act', 'bat', 'cat', 'dog', 'eel',

したがって、一重引用符、単語、別の一重引用符、カンマ、スペースの順です。次に、新しい名前の新しいファイルに出力します。

答え1

短いprintf方法:

printf "'%s', " $(< file) > output

答え2

使用sedtr:

$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n'
'act', 'bat', 'cat', 'dog', 'eel',

(出力の末尾に改行文字はありません)

input の各行の先頭と末尾にsed引用符(および後続のコンマとスペース)を挿入し、改行をtr削除します。

出力をファイルにリダイレクトする:

$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n' >newfile

答え3

使用awk:

awk '{printf ("'\'%s\'', ", $0)}' infile > new_file
'act', 'bat', 'cat', 'dog', 'eel',

または、最後に余分なカンマを避けるには、代わりに次のようにします。

awk '{printf S"'\''"$0"'\''";S=", "}'
'act', 'bat', 'cat', 'dog', 'eel'

pasteまたは引用符なしで直接使用してください。

paste -d, -s infile
act,bat,cat,dog,eel

その後、ヘルプを参照してくださいsed

sed -r "s/(\w+)/'\1'/g" <(paste -d, -s infile)
'act','bat','cat','dog','eel'

答え4

パール方法:

$ perl -lne '$sq="\x27";push @a,$sq.$_.$sq;END{ print join( ",",@a) }' input.txt                                                                                                                                                           
'act','bat','cat','dog','eel'
  • ここでは、16進値を変数に格納された一重引用符として使用sqし、ファイルから読み取られた各行に対して一重引用符で囲みます。
  • a一重引用符付きの各行は配列にプッシュされます。
  • すべての内容を読み取った後、Joinは各配列項目に次のように関連付けられたテキスト文字列を生成します。,

Pythonメソッドは同じアイデアに従います。

$ python -c 'import sys;sq="\x27";print ",".join([ sq + l.strip() + sq  for l in sys.stdin  ])' < input.txt                                                                                                                                 
'act','bat','cat','dog','eel'
  • stdinここでは、<シェル演算子を介して入力ファイルをコマンドストリームにリダイレクトします。
  • \n各行は、Perlメソッドで説明したのと同じアイデアで参照されるストリップメソッドを介して改行文字から削除されます。
  • [item for item in iterable]すべての行は構造(リスト理解と呼ばれる)を介してリストとして扱われます。
  • 最後に、",".join()すべてのリスト項目から素晴らしい文字列を作成しましょう。

関連情報