次のような行を含む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行に複数の括弧を使用するには、括弧を追加します(図を参照)。)
)
g
s/ ([^)]*)//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