パターンがあります。
62G 57G 52%
私はそれらを別の行に入れたいです。
最初の一致G Free以降、
2番目のUsed以降
、3番目のUtilized以降
だから、次のようにする必要があります
62G Free
57G Used
52% Utilised
答え1
データがというファイルにあると仮定すると、file
次のコマンドはそのファイルの各行を読み取り、指定した形式で3つの列を出力します。
$ awk '{ printf("%s Free\n%s Used\n%s Utilised\n", $1, $2, $3) }' file
62G Free
57G Used
52% Utilised
各入力行に対してコードのブロックが実行されます。ブロックには、スペースprintf()
で区切られた3つの列を3つの行にフォーマットし、テキストを追加するステートメントが含まれています。
そうすることは不可能ではありませんが、sed
不必要に難しいです。
$ sed -e 's/[[:blank:]][[:blank:]]*/:/g' -e 's/:/ Free@/' -e 's/:/ Used@/' -e 's/%/% Utilised/' -e 'y/@/\n/' file
62G Free
57G Used
52% Utilised
まず、すべての空白文字を単一の文字に圧縮してから、:
これらの文字を1つずつ置き換えて、必要な追加のテキスト文字列を挿入します。挿入時に後で改行を挿入する文字:
も追加します。@
最後のステップで挿入されたすべての@
文字を改行文字に変更します。
コマンドの代替部分に使用sed
できるGNUを使用すると、コマンドを短くすることができます。\n
s///
$ gsed -E -e 's/[[:blank:]]+/:/g' -e 's/:/ Free\n/' -e 's/:/ Used\n/' -e 's/%/% Utilised/' file
62G Free
57G Used
52% Utilised
どちらのソリューションも文字列で一時的な「プレースホルダ文字」としてsed
使用でき、これらの文字は文字列の他の場所には表示されないという事実に依存します。:
@