2011-04-20 66 views
1
sqlite3 pcheck.db "SELECT * FROM printers" 

給我:

1|10.0.0.x|HP4250INK|public|hp LaserJet 4250|"CNHXXXXXX"|14457|"Sleep Mode" 

我想提出通過分離的數據|到變量$ 1 $ 8

,以便它可以輸出像

echo "$1 $3 $5" 
echo "$2 $4 $6" 

./test.sh

1 HP4250INK hp Laserjet 4250 
10.0.0.x public "CNHXXXXXX" 

回答

9

你可以使用bash無需外部工具

output=$(sqlite3 pcheck.db "SELECT * FROM printers") 
IFS="|" 
set -- $output 
echo $1 
echo $2 #and so on 

或使用數組

IFS="|" 
output=($(sqlite3 pcheck.db "SELECT * FROM printers")) 
echo ${output[0]} 
echo ${output[1]} #and so on 
+0

不錯,'set - $ output'是做什麼用的? – 2011-04-20 09:23:29

+2

如果您在'set'下查看'bash'的手冊頁,則將選項處理後剩餘的任意 參數視爲位置參數的值,並按順序分配爲 $ 1,$ 2,... $ n.' – 2011-04-20 09:30:39

2

你可以使用

echo $YOUR_STRING | cut -d'|' -f1,3,5 

前三,和

echo $YOUR_STRING | cut -d'|' -f2,4,6 

其他三個。

1

使用awk這個試試:)

awk 'BEGIN { FS = "|" } ; { print $1 " " $3 " " $5 }' 

或者:

awk 'BEGIN { FS = "|" } ; { printf "%s\t%st\%s\n%s\t%s\t%s", $1, $3, $5, $2, $4, $6 }'