CSV 파일에 특정 열이 있는 경우 제거

CSV 파일에 특정 열이 있는 경우 제거

약 25개의 열이 포함된 CSV 파일이 있습니다. 파일의 일부 행에는 26개의 열이 포함되어 있으므로 해당 추가 열이 포함된 줄을 검색하고 제거하여 전체 파일에서 awk를 사용할 수 있습니다.

필드는 다음으로 구분됩니다.; 세미콜론. 추가 열의 형식은 다음과 같습니다.VARNAME="텍스트가 여기에 있습니다.""text is here" 값은 임의의 텍스트입니다.

나는 그럭저럭 제거에 성공했다변수 이름모든 줄에서 임의의 값(인용된 텍스트)과 일치하는 패턴을 탐색할 수 없습니다.

내 목표는 추가 열이 있는 줄을 찾는 것입니다(VARNAME="텍스트가 여기에 있습니다.") 그리고 제거하세요.

예:

현재 파일:

ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"

대상 파일은 다음과 같아야 합니다.

ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"

답변1

다음과 같은 것을 사용할 수 있습니다.

sed 's/;VAREXT.[^;]*//' file  #combine with -i for in-place editing

테스트:

a=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"'
b=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="1234567";VAR3="Value 6"'
c=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="VAREXT";VAR3="Value 6"'

echo "$a" |sed 's/;VAREXT.[^;]*//'
echo "$b" |sed 's/;VAREXT.[^;]*//'
echo "$c" |sed 's/;VAREXT.[^;]*//'

"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"

답변2

csv에 헤더가 없을 것으로 예상하고 세미콜론 뒤에 공백이 없으며 VAREXT...한 줄에 하나만 있으면 샘플과 관련하여 다음을 시도하십시오.

sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv

가치가 있는 곳바렉스문자, 숫자, 공백의 조합일 수 있습니다.

관련 정보