擬似コードは次の連続です。この回答
gsed 's/|/1)/g' 's/|/2)/2g' 's/|/3)/3g' 's/|/5)/4g' 's/|/5)/5g'
<input.csv >output.csv
もちろんこれはうまくいきません。私が興味を持っているのは、gsed
そのようなサイクルをどのように管理するかです。
gsed
そのようなループに拡張する方法は何ですか?
ベストアンサー1
上記の場合は、次のようにできます。
gsed 's/|/1)/; s/|/2)/; s/|/3)/; s/|/4)/; s/|/5)/'
例:
$ echo '| | | | |' | sed 's/|/1)/; s/|/2)/; s/|/3)/; s/|/4)/; s/|/5)/'
1) 2) 3) 4) 5)
|
この方法は、行の最大数を事前に推定してs/|/N)/
それに応じて追加できる場合に有効です。
1行の最大数を予測できない場合でも、を使用して計算でき、|
バッファgsed
を保持するカウンタを使用して次を使用できます。この賢いデバイス著者:ブルーノハイブル。しかし、実際の実装は少し難しいので、そのままにします。マゾヒスト敏感な読者。
もちろん、最も簡単な方法は以下を使用することですawk
。
awk '{ cnt = 0; while(sub(/\|/, ++cnt ")")); print }'
証明する:
$ echo '| | | | |' | awk '{ cnt = 0; while(sub(/\|/, ++cnt ")")); print }'
1) 2) 3) 4) 5)