ファイルの変数に文字列/単語を挿入し、スペースの代わりに区切り文字を連結します。

ファイルの変数に文字列/単語を挿入し、スペースの代わりに区切り文字を連結します。

次のファイルがあります(例です)。

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

関連情報