Bash 스크립트의 MySQL 출력 형식

Bash 스크립트의 MySQL 출력 형식

나는 얻는 형식이 완전히 다른 mysql 쿼리를 사용하는 bash 스크립트를 작성하고 있습니다.

묻다:

root@debian:~# mysql -u root -ptoor super_market -h 0 -e "select * from items;" 
+---------+------------+--------+-------------+-------+
| item_id | item_name  | weight | brand       | price |
+---------+------------+--------+-------------+-------+
|       1 | Milk       |   2.00 | Nestle      |  2.00 |
|       2 | Cheese     |   2.50 | Amul        |  6.00 |
|       3 | Chips      |  25.00 | Lays        |  3.00 |
|       4 | Coke       |   5.00 | Coke Cola   |  3.50 |
|       5 | Engage     |   5.00 | Deo         |  3.50 |
|       6 | Engage     |   5.00 | Deo         |  3.50 |
|       7 | Ear phones |   4.00 | Skull Candy | 32.30 |
+---------+------------+--------+-------------+-------+

사용할 형식열-t명령 출력 형식을 정렬하는 중입니다.

root@debian:~# mysql -u root -ptoor super_market -h 0 -e "select * from items;" | column -t
item_id  item_name  weight  brand   price
1        Milk       2.00    Nestle  2.00
2        Cheese     2.50    Amul    6.00
3        Chips      25.00   Lays    3.00
4        Coke       5.00    Coke    Cola   3.50
5        Engage     5.00    Deo     3.50
6        Engage     5.00    Deo     3.50
7        Ear        phones  4.00    Skull  Candy  32.30

배쉬 스크립트 위 명령을 사용하여 bash 스크립트를 시도했습니다.

root@debian:~# cat test
#!/bin/bash

while read -r output;
do
    echo $output | awk '{print $4}'
    #do something
done< <(mysql -u root -ptoor super_market -h 0 -e "select * from items;" | sed 1d |column -t)

산출

root@debian:~# ./test
Nestle
Amul
Lays
Coke
Deo
Deo
4.00

하지만예상 출력:

Nestle
Amul
Lays
Coke Cola
Deo
Deo
Skull Candy

예! 당신은 사용하여 말할 수 있습니다제품에서 브랜드를 선택하세요. 예를 들어 저는 실시간으로 전혀 다른 명령을 사용합니다.

팁이나 도움이 필요하신가요?

답변1

mysql이 플래그와 함께 사용하면 -tmysql의 쿼리에서 bash 출력으로 직접 출력을 얻을 수 있습니다.

sed그런 다음 또는 를 사용하여 awk수평선과 '을 제거하여 구분 기호를 정리할 수 있습니다 |.

답변2

mysql의 출력은 탭으로 구분됩니다. column탭 문자를 공백으로 바꾸면 입력 내용이 손상됩니다.

#!/bin/bash

while read -r output;
do
    # use double quotes with "$output" to avoid conversion
    # of tabs to spaces and set awk's Field Separator to "\t"
    echo "$output" | awk -F"\t" '{print $4}'
    #do something
done< <(mysql -u root -ptoor super_market -h 0 -e "select * from items;" | sed 1d)

테스트 실행:

root@c2:~# mysql -u root -ptoor super_market -h 0 -e "select * from items;"
+---------+------------+--------+-------------+-------+
| item_id | item_name  | weight | brand       | price |
+---------+------------+--------+-------------+-------+
|       1 | Milk       |      2 | Nestle      |     2 |
|       2 | Cheese     |    2.5 | Amul        |     6 |
|       3 | Chips      |     25 | Lays        |     3 |
|       4 | Coke       |      5 | Coke Cola   |   3.5 |
|       5 | Engage     |      5 | Deo         |   3.5 |
|       6 | Engage     |      5 | Deo         |   3.5 |
|       7 | Ear phones |      4 | Skull Candy |  32.3 |
+---------+------------+--------+-------------+-------+
root@c2:~# ./test.sh 
Nestle
Amul
Lays
Coke Cola
Deo
Deo
Skull Candy
root@c2:~# 

답변3

column테이블이 이미 완성되어 있으므로 도구를 사용할 필요가 없습니다 . awk범용 구분 기호와 함께 사용해 보세요 |.

echo당신은 당신의 라인에서 다음을 수행할 수 있습니다

echo "$output" | awk -F'|' '{print $5}'

그래서 그것은 다음과 같이 끝난다.

#!/bin/bash

while read -r output;
do
    echo $output | awk '{print $5}'
    #do something
    done< <(mysql -u root -ptoor super_market -h 0 -e "select * from items;" | sed '1,2d')

답변4

mysql -N -B  moodle -e  "select id from mdl_course;"

산출

abcd@pqrs:~/backup/script $ mysql -N -B  moodle -e  "select id from mdl_course;"
1
2
4
5
8
9
10
11
12
14
16
17
3
6
7
15

관련 정보