次のファイルがあります(例です)。
more machines.txt
Node23
Node34
Node12
Node95
Node23
すべてのノードのリストを変数に挿入し、各ノードを「、」区切り文字で連結しようとしています。
予想結果の例(スペースなし)
Node23,Node34,Node12,Node95,Node23
これを試してみましょう
LIST=` sed -e 's/\s\+/,/g' machines.txt `
しかし、私たちの方法は、マシン間に区切り文字を追加しません。
echo $LIST
Node23 Node34 Node12 Node95 Node23
変数からcsvリストを取得する正しい方法は何ですか(この構文はbashスクリプトになければなりません)
答え1
そしてpaste
:
list=$(paste -sd, < machines.txt)
答え2
このsed
コマンドはデフォルトで1行ずつ計算します。したがって、コマンドは改行文字を置き換えません。次のコマンドを実行してこれを確認できます。
echo "$LIST"
これは、元のファイルコンテンツに対して実際に何もしなかったことを示します。
1文字だけを変更するので、このtr
ツールをで使用することをお勧めしますsed
。結果のコマンドは次のとおりです。
LIST=$(tr '\n' ',' < machines.txt)
デフォルトでは、この行は\n
改行文字をカンマで置き換える意味です。,
sed
後にカンマがある場合は、最後のコンマを削除するコマンドを追加することもできます。
LIST=$(tr '\n' ',' < machines.txt | sed 's/,$//')
答え3
私のアプローチ:
$ LIST=$(echo $(<machines.txt) | sed 's/ /,/g')
$ echo "$LIST"
$ Node23,Node34,Node12,Node95,Node23