awk/sed/linux-shell 스크립트를 사용하여 Linux에서 mysql 데이터베이스를 업데이트하는 방법은 무엇입니까?

awk/sed/linux-shell 스크립트를 사용하여 Linux에서 mysql 데이터베이스를 업데이트하는 방법은 무엇입니까?

두 개의 열로 나누어진 "Frequency.txt"라는 데이터 파일이 있는데, 열 1은 ID의 해당 열 2와의 반복을 보여주는 숫자인 "Frequency"입니다.

예:-

데이터

주파수, ID

 32    329
312    330
320    331
132    332
232    334
 52    336
 42    337
 82    338
 ..    ...     

위의 데이터는 mysql 데이터베이스의 컬럼에서 업데이트되어야 합니다. 100개 이상의 행이 있으며 매일 업데이트됩니다. 이제 이 명령을 사용하여 수동으로 업데이트하고 있습니다.

echo ' update table.id_set set 'frequency' = 32 whereID=329; '|mysql -B -u username -p -h database.com

위 echo 명령의 "Frequency" 및 "id" 값을 자동으로 대체하고 Frequency.txt의 모든 기존 행에 대해 스크립트를 실행하는 쉘 스크립트를 작성하는 방법

추신: -Frequency.txt의 줄 수는 다양합니다.

답변1

당신은 그것을 사용할 수 있습니다MySQL 가져오기아니면 직접 전화해서데이터 파일 로드sql 문(mysql을 통해).

mysqlimport는 "고정 너비" 데이터 파일을 좋아하지 않지만 다음을 볼 수 있습니다.고정 너비, 공백으로 구분된 .txt 파일을 mySQL에 로드이를 처리하는 방법의 예입니다.

이 예는 다음에 의존합니다.가설이 열은 id테이블의 기본 키입니다 id_set.

LOAD DATA LOCAL INFILE '/some/path/data.txt' 
REPLACE INTO TABLE id_set
(@row)
SET frequency = TRIM(SUBSTR(@row,1,7)),
    id = TRIM(SUBSTR(@row,8,50))
;

답변2

편리한 테스트 도구가 없지만 mysql여러 SQL 문을 허용할 수 있는 경우:

awk '{print "update table.id_set set frequency = "$1" where id = "$2";"}' < input | 
  mysql -B -u username -p -h database.com

예제 입력에서 awk 명령은 이를 다음 mysql명령으로 보냅니다.

update table.id_set set frequency = 32 where id = 329;
update table.id_set set frequency = 312 where id = 330;
update table.id_set set frequency = 320 where id = 331;
update table.id_set set frequency = 132 where id = 332;
update table.id_set set frequency = 232 where id = 334;
update table.id_set set frequency = 52 where id = 336;
update table.id_set set frequency = 42 where id = 337;
update table.id_set set frequency = 82 where id = 338;

관련 정보