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

이 표현식은  ([^)]*)공백, , 문자 (가 아닌 문자 수에 관계없이 , 가 차례로 옵니다 . 이는 데이터에서 제거됩니다. 한 줄에 여러 개의 괄호를 사용하려면 괄호를 추가하세요 (그림 참조).))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

관련 정보