スペースを別の値に置き換える方法は?

スペースを別の値に置き換える方法は?

約8,000のレコードを含む区切りファイルがあります|

3列が空の場合は2列の値に変更したいと思います。私たちはこれをどのように達成しますか?

入力する:

1|100437251|
2|51414204|
3|111651604|111651604
4|8321737|8321737
5|27263401|27263401

出力:

1|100437251|100437251
2|51414204|51414204 
3|111651604|111651604
4|8321737|8321737
5|27263401|27263401

sed交換コマンドを試してみましたsed -i "s/ /$2/g" input > output

ベストアンサー1

そして:

sed -E 's/^([^|]*\|)([^|]*)\|$/\1\2|\2/' infile

この部分は、([^|]*\|)最初の列と区切り文字(\1逆参照)をキャプチャします。
この部分は([^|]*)2番目の列(\2逆参照)をキャプチャします。
この部分は\|$行末の最後の区切り文字をキャプチャし、その後に他の区切り文字はありません(3番目の列が空であることを意味します)。

このセクションでは、\1\2|\2逆参照アドレスを使用して最初と2番目の列を返し、区切り文字を使用して2番目の列を再コピーします。


3番目の列が空ではなく、タブ/スペース([[:space:]])などの空白文字が含まれる可能性がある場合は、代わりにこの列を使用してください。

sed -E 's/^([^|]*\|)([^|]*)\|[[:space:]]*$/\1\2|\2/' infile

そして:

awk 'BEGIN{ FS=OFS="|" } $3 ~/^[[:space:]]*$/ { $3=$2 }1' infile

FSはF生産するS区切り記号、OFSの例酸素出力F生産するS次に、3番目の列が空であるか/タブ/スペースであることを確認し、その内容を2番目の列と同じように更新します。次に印刷します1

おすすめ記事