값이 포함된 일부 필드가 포함된 파일이 있고 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