나는 얻는 형식이 완전히 다른 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
이 플래그와 함께 사용하면 -t
mysql의 쿼리에서 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