다음과 유사한 행이 포함된 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