Linuxのcsvファイルからテキストブロックを削除する

Linuxのcsvファイルからテキストブロックを削除する

次のような行を含むCSVファイルがあります。

PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer (BondUKTI  / //-MO/W////.%)|5708|124.9

( )列6では、CSVの各行から1つのブロックを削除する必要があります。かっこが現れる唯一の場所です。

その中に現れるパターンはありませんが、( )常に含まれています( )

予想される出力は次のとおりです。

PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer|5708|124.9

私はLinuxを初めて使用します。 Linuxコマンドを入手するのに役立つ人はいますか?

答え1

角かっこと前のスペースを削除し、角かっこの内容に改行文字が含まれていないと仮定すると、次のようになります。

$ sed 's/ ([^)]*)//' file
PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer|5708|124.9

この式は、 ([^)]*)空白、、文字(ではない文字数に関係なく、が次々と来ます。これはデータから削除されます。 1行に複数の括弧を使用するには、括弧を追加します(図を参照)。))gs/ ([^)]*)//g

角かっこの前後にスペースを許可する必要がある場合を使用してくださいs/[[:blank:]]*([^)]*)[[:blank:]]*//。各は[[:blank:]]*スペースまたはタブの数と一致します。

答え2

スクリプトを作成して完全に最適化する方法はいくつかあります。以下を試してください。

#!/bin/bash

while IFS= read -r line
do
  echo  $line | cut -d "(" -f1 |xargs echo -n>> new.csv
  echo  $line | cut -d ")" -f2  >> new.csv
done < input.cvs

関連情報