以下はデータベースクエリの出力です。
1 KALI,REGISTERED
2 KALI,PROCESSING
3 KALI,RECEIVED
1 KALI,SUBMITTED
7 KALI,SUCCEEDED
4 WEKA,PROCESSING
出力は毎回変更され、行数はクエリが最後に実行されたときとは異なる場合がありますが、フォーマットは常に次のようになりますnumber space word,word
。次のように見えるようにする必要がありますnumber,word,word
。クエリ自体でこの問題を処理しようとしましたが、データベースはそれをサポートしていないため、Linuxを使用して処理することにしました。このコマンドを使用してスペースをコンマで置き換えます。sed -e 's/\s\+/,/g' command.output
.次のような出力が表示されます。
,1,KALI,REGISTERED,
,2,KALI,PROCESSING,
,3,KALI,RECEIVED,
,1,KALI,SUBMITTED,
,7,KALI,SUCCEEDED,
,4,WEKA,PROCESSING,
しかし、私は配列に保存できるように、次のようなことを期待しています。
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING
さらにコマンドを試しましたが、何も機能しませんでした。この出力をどのように取得できますか?
答え1
理想的には、必要な形式でデータを出力するようにデータベースクエリを変更する必要があります。
$ awk -v OFS=',' '{ $1 = $1; print }' file
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING
awk
これは、スペースまたはタブ区切りデータをコンマ区切りデータに再フォーマットするために使用されます。OFS
出力フィールド区切り記号をコンマに設定し、各入力レコードのフィールド値を変更すると、レコードは新しい出力区切り文字でawk
再生成されます。印刷すると、目的の結果が表示されます。
awk
デフォルトでは、各行を読み取るとき、各行の先頭または末尾のスペースも無視されます。
以下を使用してこれを行うには、最初の最初のsed
スペースをすべて削除してから、残りの最初のスペースをコンマに変更します。
$ sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]/,/' file
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING
このパターンはスペースまたはタブと一致します(Perl正規表現と[[:blank:]]
同様)。\s
私は習慣的にそれを使用しますが、実際にタブを扱わない限り(質問では明確ではありません)、単一のリテラルスペースを使用したいと思います。sed
同じパラメータに両方の式を作成することもできます。
sed 's/^ *//; s/ /,/' file