Develope/LINUX

[Shell Script, Mysql] mysql -e 명령어 시 결과 억지로 출력하기 (wc -l / -Bse)

고로이 2017. 11. 22. 15:53
반응형

mysql 을 서버에서 자주 쓰는 사람들이라면 익숙할 명령어 : -e



mysql -u$USER -p$PW $DB -e "select * from table_name"


을 하면 



$ mysql  --local-infile=1 -e "select * from TABLE_NAME limit 10;"

+----------------------------------+---------------------+---------------------+-------------+------------+------------+-------------+--------------------+-----

 collect_date        | equip_date          | key_id | data_id     | point_id   | point_value | point_change_value | etc  |

+----------------------------------+---------------------+---------------------+-------------+------------+------------+-------------+--------------------+------| 2017-08-01 00:00:00 | 2017-08-01 00:15:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5532.000 |            0.00000 |      |

2017-08-01 00:15:00 | 2017-08-01 00:30:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5532.000 |            0.00000 |      |

2017-08-01 00:30:00 | 2017-08-01 00:45:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5546.000 |           14.00000 |      |

2017-08-01 00:45:00 | 2017-08-01 01:00:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |           -7.00000 |      |

2017-08-01 01:00:00 | 2017-08-01 01:15:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |

2017-08-01 01:15:00 | 2017-08-01 01:15:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |

2017-08-01 01:30:00 | 2017-08-01 01:45:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |

2017-08-01 01:45:00 | 2017-08-01 02:00:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |

2017-08-01 02:00:00 | 2017-08-01 02:15:01 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |

2017-08-01 02:15:00 | 2017-08-01 02:30:00 | aaaaaaaaaaaa  | bbbbbbbbbb | 0103000011 |    5539.000 |            0.00000 |      |



이런 비슷한 결과가 나온다.



내가 해야할 일은


LOAD_DATA



즉 


http://vivi-world.tistory.com/entry/Mysql-ShellScript-Import-Data-sh-%ED%8C%8C%EC%9D%BC?category=680707


이쪽의 내용을 수정해야 햇다.




요구사항은 컬럼개수를 출력해달라는 것


key 가 같을 때  LOAD DATA LOCAL INFILE은 warning 메세지만 띄우고 아무 결과도 리턴하지 않는다 ;; 극혐





1. 전체 라인 구하기


[ wc -l $DATA_DIR/$TNAME/$FDIR/$FILE | cut -f 1 -d " " ]


FILE의 라인개수를 세고 (wc -l )

결과를 자를 건데( cut ) " " 구분자로 자르고(-d " " ) 1번째 것을 가져온다 (-f 1)



[ cat $FILE  | wc -l ]

을 해도 되지만 

이는 IO를 많이 잡아먹기에 패스



2. -e select 결과값 가져오기

트랜잭션을 걸엇다.

$ mysql  -e "START TRANSACTION;LOAD DATA LOCAL INFILE '$FILE' INTO TABLE TABLE_NAMECHARACTER SET UTF8 FIELDS TERMINATED BY ',';SELECT ROW_COUNT();COMMIT;"

+-------------+

| ROW_COUNT() |

+-------------+

|           0     |

+-------------+



뒷부분의 select row_count() 부분에서 개수를 가져온다.


간단하게 표현하기 위해
-e 옵션을 -Bse 로 변경 

출처 : http://118k.tistory.com/377




**결과



mysql -u$USER -p$PW $DB --local-infile=1  -Bse "START TRANSACTION;LOAD DATA LOCAL INFILE '$DATA_DIR/$TNAME/$FDIR/$FILE' INTO TABLE $TNAME CHARACTER SET UTF8 FIELDS TERMINATED BY ',' ;SELECT ROW_COUNT();COMMIT;"`


==================================================================================

Table Name : test / DIR : test_t1


test_t1-20170802000000.csv ( Runtime: 0 FILECOUNT : 792 / ROWS : 792 )

test_t1-20170803000000.csv ( Runtime: 0 FILECOUNT : 759 / ROWS : 759 )

test_t1-20170804000000.csv ( Runtime: 0 FILECOUNT : 792 / ROWS : 792 )

==================================================================================







반응형