CSV 파일에 이전 일치 항목의 열을 추가합니다.

CSV 파일에 이전 일치 항목의 열을 추가합니다.

다음 형식의 CSV 파일이 있습니다( ;구분 기호).

KEY;..;..;..;..;id1;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

KEY;..;..;..;..;id2;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

id로 시작하는 각 행에서 (열 6)을 가져 KEY와서 로 시작하는 다음 행에 추가 해야 합니다 SUBKEY. 따라서 결과는 다음과 같아야 합니다.

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2

Bash 스크립트에서 이를 수행하는 방법을 아시나요?

답변1

Awk해결책:

awk 'BEGIN{ FS = OFS = ";" }
     $1 == "KEY"{ id = $6; next }
     { print $0 (NF? OFS id : "") }' file.csv
  • FS = OFS = ";"- ;필드 구분 기호( FS) 및 출력 필드 구분 기호( OFS) 로 처리됩니다.
  • $1 == "KEY"{ id = $6; next }- 첫 번째 필드가 $1여섯 번째 필드의 "KEY"문자열 세트 변수 와 동일한 경우. 다음 레코드로 강제 이동합니다(현재 레코드 건너뛰기).id$6
    nextawk
  • print $0 (NF? OFS id : "")- 레코드에 필드가 있는 $0경우 ( 내장 변수로 보장) 전체 레코드를 인쇄/출력합니다. 즉, 레코드가 비어 있지 않은 경우 - 레코드 끝에 (as ) 및 현재 값을 추가합니다.
    NF;OFSid

산출:

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2

답변2

해결책:

sed -E '/^KEY/{s/([^;]*;){5}([^;]*).*/\2/;h;d};/;/{G;s/\n/;/}' file.csv
  • /^키/{s/([^;];){5}([^;]).*/\2/;h;d}

행이 KEY로 시작하는 경우 6번째 필드를 예약된 공간에 유지하고 행을 삭제합니다.

  • /;/{G;s/\n/;/}

줄에 필드가 포함되어 있으면 끝에 예약된 공간을 확보하고 \n을 ;로 바꾸세요.

답변3

나는 이것을 수행하여 문제를 해결했습니다 sed -r 's|^(\S+)(\s+\S+)$|s/^\1.*/\&\2/p|' sed -nf - 파일 1

이제 서버가 위치한 ESX의 이름이 포함된 CSV 파일에 열을 추가해야 하는 문제에 직면했습니다. 다른 파일의 조건부 검색을 기반으로 csv에 필드 추가

관련 정보