次の形式の大きなテキストファイル(666000列)があります。
A B C D E F
希望の出力
AB CD EF
sed
またはでどのようにこれを行うことができますかawk
?いくつか試してみましたが、何も動作しないようです。何かを提案してください。
ベストアンサー1
存在するsed
:
sed 's! \([^ ]\+\)\( \|$\)!\1 !g' your_file
その後、置換が実行され、結果が標準出力として印刷されます。ファイルを変更するには、-i
スイッチを追加してください。
sed -i 's! \([^ ]\+\)\( \|$\)!\1 !g' your_file
説明する
このsed
コマンドは、空白、空白ではなく、1 つ以上の文字、最後に空白、または行末を探します。シーケンスを見つかった空白以外の文字に置き換え、その後に空白が続きます。g
修飾子は最後に提供されるため、置換は行全体にわたって可能な限り適用されます(これをグローバル置換と呼びます)。したがって、基本的に、このようなシーケンスの場合、A B C
パターンsed
「B」が発見され、「B」に置き換えられ、AB C
最終結果が残る。
このコードの仮定
たとえば、このコードでは、列間の空白が実際にはタブではなく空白であるとします。この問題は簡単に解決できますが、読みやすさが低下します。
sed 's![[:blank:]]\+\([^[:blank:]]\+\)\([[:blank:]]\+\|$\)!\1 !g' your_file