AWK는 변수에 값을 설정합니다.

AWK는 변수에 값을 설정합니다.

값이 포함된 일부 필드가 포함된 파일이 있고 csv이러한 값의 조합을 인쇄하고 싶습니다(결국 sql스크립트가 됩니다).

AWK를 사용해 보았지만 결과가 없습니다.

내 파일의 일부 csv:


ATTR_A,2,,
ATTR_B,2,,
ATTR_C,2.5

단일 문자열로 속성(나열된 속성 이상)의 모든 값을 인쇄하고 싶습니다.

내 최종 결과는 다음과 같습니다.

a 속성의 값은 2, b 속성의 값은 2, c 속성의 값은 2.5입니다.

이렇게 하면 다음과 같이 SQL 스크립트로 쉽게 변환할 수 있습니다.

 INSERT INTO `db`.`table` (`attribute_a`, `attribute_b`, `attribute_c`) VALUES ('2', '2', '2.5');

나는 다음 스크립트를 시도했습니다.


BEGIN {FS=",";}
{

if($1 ~ "ATTR_A")
    $va=$2;

if($1 ~ "ATTR_B")
    $vb=$2;
}

END { print $va $vb}
  

하지만 마지막 줄만 인쇄됩니다. 내가 뭘 잘못했나요?

답변1

awk -F'[,_]' '{ attrs[$2]=$3; };
END{ printf "INSERT INTO db.table (";
     for(attr in attrs) { printf ("%s\047attribute_%s\047", sep, attr); sep=", "; };
     printf ") VALUES ("; sep="";
     for(attr in attrs) { printf ("%s\047%s\047", sep, attrs[attr]); sep=", "; };
    print ")";
}' infile
INSERT INTO db.table ('attribute_A', 'attribute_B', 'attribute_C') VALUES ('2', '2', '2.5')

답변2

awk -F "," 'ORS=","{gsub(/.*_/,"",$1);print "The value of attribute "$1" is "$2}' filename| sed "s/,$//g"

산출

The value of attribute A is 2,The value of attribute B is 2,The value of attribute C is 2.5

관련 정보