file1.dat
次の内容を含む区切り文字ファイル。その列の$COL
各区切り文字にテキスト文字列を追加して3番目の列を変更したいと思います。#
すべての行に対してこれを行い、同じ名前でファイルを保存したいと思います。
誰でも助けることができますか?
入力サンプル
name|class|colors|age|email
abc|xyz|#orange#green#pink#blue|16|[email protected]
pqr|xyz|#orange#green#pink#blue|20|[email protected]
希望の出力
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
答え1
$COL
あなたの例では、で始まる行の各文字列の末尾に追加したいと思います#
。この単純なケースでは、次のように簡単に実行できます。
$ sed -E 's/(#[^#|]*)/\1$COL/g' file
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
またはsed
サポートしていない場合-E
:
sed 's/\(#[^#|]*\)/\1$COL/g' file
-i
以下を使用して、その場所でファイルを編集できます。
sed -i -E 's/(#[^#|]*)/\1$COL/g' file
より一般的な場合、区切り文字列$COL
の追加を置き換えるには、#
3番目の区切りフィールドでのみ|
次の操作を実行できます。
$ awk -F'|' -vOFS='|' 'NR>1{gsub(/#[^#|]*/,"&$COL",$3)}1' file
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
最新バージョンのGNUでは、以下を使用してファイルを編集awk
できます。-i inplace
awk -iinplace -F'|' -vOFS='|' 'NR>1{gsub(/#[^#|]*/,"&$COL",$3)}1'
#
最後に、楽しみのためにPerlを使用してすべての-defend文字列を変更することもできます。
perl -pe 's/(#[^#|]+)/$1\$COL/g' file
または、3番目の列で次の操作を行います。
perl -F'\|' -lane '$F[2]=~s/(#[^#|]+)/$1\$COL/g; print join "|",@F' file
または、3番目の列でこれを行い、最初の行をスキップします。
perl -F'\|' -lane '$F[2]=~s/(#[^#|]+)/$1\$COL/g if $.>1; print join "|",@F' file
どちらの場合も、-i
ファイルをその場で編集できます。