ファイル操作は、テキストファイルの各行に12、44、60文字ごとに「;」を挿入します。

ファイル操作は、テキストファイルの各行に12、44、60文字ごとに「;」を挿入します。

区切り文字なしでデータを含むテキストファイルからcsvファイルを作成する必要があります。

良い:

2015021DUMMY001EAN1377689456777678945GERDE0002345
2015031DUMMY002EAN1345647876867867867TURTR0154565
......

bashまたはsedを使用して各行のすべてのx、y、およびz文字にセミコロンを挿入する簡単な方法はありますか?

答え1

12文字、32文字、16文字のグループを使用できます(12+32=44、44+16=60)。

sed 's/\(.\{12\}\)\(.\{32\}\)\(.\{16\}\)/\1;\2;\3/'

あなたのサンプル入力には60文字が含まれていません(正しく計算すると49文字)。それ以外の場合は、12と32のみが使用されます。

$ sed 's/\(.\{12\}\)\(.\{32\}\)/\1;\2;/' input
2015021DUMMY;001EAN1377689456777678945GERDE00;02345
2015031DUMMY;002EAN1345647876867867867TURTR01;54565

...あなたが望むものかもしれないし、そうでないかもしれません。

通常、グループの長さはx、yx、およびzyx文字です。

または、3つの別々の代替品を使用できます。

sed 's/.\{12\}/&;/; s/.\{45\}/&;/; s/.\{62\}/&;/'

この場合、長さはx、y + 1(xに挿入されたセミコロン)、およびz + 2になります。

答え2

sed 's/./&;/59; s//&;/43; s//&;/11' <in >out

;あなたが望むかどうかわかりません。はい1行の12番目、44番目または60番目の文字、またはフォローするそれ。後者の場合、すべての数字に1を追加し、行の末尾にセミコロンを追加するリスクがあります。(それが重要な場合)または以下を参照してください。ただし、上記のようにすでにsed59番目の文字がない場合、60番目の文字は追加されません。

追加の代わりに挿入を実行します。

sed 's/./;&/60; s//;&/44; s//;&/12' <in >out

...他の方法です。この場合、sedセミコロンは行末に追加されません。セミコロンは60番目の文字位置にのみ挿入されます。(例えば)そうすれば必ず61人になります。

これら3つの代替は相互依存的ではありません。どのような方法で作成しても、行の長さsedに応じてセミコロンの1つ、2つ、または3つが追加されます。 59文字または60文字を含む行は3行、42文字または43文字より長い短い行はセミコロンの2行を持ち、11文字または12文字以上に一致する他の行は一度だけ編集されます。 11 文字より短い行は影響を受けません。

3 つのセミコロンをすべて正当化できるほど長い行にのみ影響を与えるには、次のようにします。

sed  -e's/./;&/60;ts'  -eb -e:s \
     -e's//;&/44;s//;&/12' <in >out

...そうです。

... GNUと共にsed (そしてminisedT代わりにestを使用できます。失敗するただ成功だけのためのものではありません。

sed -e's/./&;/59;T; s//&;/43; s/&;/12' <in >out

関連情報