在 Linux 中从 csv 文件中删除文本块

在 Linux 中从 csv 文件中删除文本块

我有一个 CSV 文件,其中的行类似于:

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

( )在第 6 列中,我需要从 CSV 的每一行中删除一个块。这是唯一会出现括号的地方。

其中出现的内容没有模式,( )但它总是包含在 中( )

预期输出为:

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

该表达式 ([^)]*)将匹配一个空格,后跟(,后跟任意数量的非 字符),最后跟一个)。这将从数据中删除。如果您希望一行中包含多个括号,请添加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

相关内容