grep的用法 - Linux

By George
at 2014-03-09T07:08
at 2014-03-09T07:08
Table of Contents
※ 引述《lc85301 (pomelocandy)》之銘言:
: ※ 引述《verdd (R.V.)》之銘言:
: : 各位大大 高手好 想請問各位一個grep抓資料的問題
: : 我想要從資料庫裡面挑選我要的資料
: : 例如我想從5筆資料裡面挑選特定3筆出來
: : 資料庫的結構是這樣
: : 例如
: : 1 x x x x x x x x .......
: : 2 y y y y y y y y.........
: : 3 z z z z z z z z ........
: : 4 a a a a a a a a ........
: : 5 b b b b b b b b ...........
: : 我想指定第1,4,5 筆資料被挑出來 包括後面那一串東西都被完整列出來
: : 然後寫入result.txt檔
: : 1 x x x x x x x x .......
: : 4 a a a a a a a a ........
: : 5 b b b b b b b b ...........
: : 請問我指令該怎麼打呢? 謝謝各位指教
: : grep ......... "database.txt" > result.txt
: 我回一個來試著回答
: 首先我要說原PO的問題有點模糊
: 我猜CP64大大也是想回文"選出來的條件是什麼"也是類似的原因
: 如果問題只有verdd描述的這樣幾行,那用grep sed去取就可以
: 但grep的用法是比對某特定字串,這裡只有3個,但要取的內容完全不一樣
: 而且1,4,5很容易跟內容重複
: 要是要取出開頭為1,4,5,9,13,22,35,57 ,咦,自動找出規律了(誤)
: 你用grep 解就會吃土
: sed一樣,數量一多也會吃土
: --
: 如果數字有規律,例如每3行去取
: 那應該可以用awk去解
: 事實上我覺得我打的規律1,4,5,9應該可以用awk去取
: 小弟不才,有沒有強者出來解一下lol
: --
: 如果問題大到100行以上
: 這時候我就會選python script
: 但首先還是要回到你的條件
: "請問你選出來的條件是什麼"
: 也許是一堆想找的字串或數字
: 假設是字串好了
: 我會先建個dict
: 然後取每行的第一個token,看看它在不在dict裡面
: 那請問這些東西在哪?也許在另一個檔案?
: 我們都不知道耶lol
: --
: 總之,問題問得愈清楚,大家也就回答的愈清楚
我用幾個檔案測試了苦主的問題,lc85301大大說應該用awk解決,我也是用這工具...
如果確定要用每列開頭第一行的數據來決定要不要print出來這一列,可以這麼做:
awk '{if ($1==1 || $1==4 || $1==5){print $0}}' database.txt >> out.dat
$1代表每列的第一行,由於這個問題要用第一行做判斷故出此策,$0代表一整列.
out.dat 就會看到過濾的結果了。
--
◤ ◥ ◢ ◣
傑米,炸掉它吧。 ⊙▁⊙─ ─⊙▂⊙ 碰到問題,用C4就對了!
╰ ∕皿﹨ ◥皿◤ ╯
◥█◤◢ ◥ ︶◤
Adam Savage ◤ ︶ ◥◤ ﹨▼∕◥ James Hyneman
MYTHBUSTERS ◥ ◤\◥ by dajidali
--
: ※ 引述《verdd (R.V.)》之銘言:
: : 各位大大 高手好 想請問各位一個grep抓資料的問題
: : 我想要從資料庫裡面挑選我要的資料
: : 例如我想從5筆資料裡面挑選特定3筆出來
: : 資料庫的結構是這樣
: : 例如
: : 1 x x x x x x x x .......
: : 2 y y y y y y y y.........
: : 3 z z z z z z z z ........
: : 4 a a a a a a a a ........
: : 5 b b b b b b b b ...........
: : 我想指定第1,4,5 筆資料被挑出來 包括後面那一串東西都被完整列出來
: : 然後寫入result.txt檔
: : 1 x x x x x x x x .......
: : 4 a a a a a a a a ........
: : 5 b b b b b b b b ...........
: : 請問我指令該怎麼打呢? 謝謝各位指教
: : grep ......... "database.txt" > result.txt
: 我回一個來試著回答
: 首先我要說原PO的問題有點模糊
: 我猜CP64大大也是想回文"選出來的條件是什麼"也是類似的原因
: 如果問題只有verdd描述的這樣幾行,那用grep sed去取就可以
: 但grep的用法是比對某特定字串,這裡只有3個,但要取的內容完全不一樣
: 而且1,4,5很容易跟內容重複
: 要是要取出開頭為1,4,5,9,13,22,35,57 ,咦,自動找出規律了(誤)
: 你用grep 解就會吃土
: sed一樣,數量一多也會吃土
: --
: 如果數字有規律,例如每3行去取
: 那應該可以用awk去解
: 事實上我覺得我打的規律1,4,5,9應該可以用awk去取
: 小弟不才,有沒有強者出來解一下lol
: --
: 如果問題大到100行以上
: 這時候我就會選python script
: 但首先還是要回到你的條件
: "請問你選出來的條件是什麼"
: 也許是一堆想找的字串或數字
: 假設是字串好了
: 我會先建個dict
: 然後取每行的第一個token,看看它在不在dict裡面
: 那請問這些東西在哪?也許在另一個檔案?
: 我們都不知道耶lol
: --
: 總之,問題問得愈清楚,大家也就回答的愈清楚
我用幾個檔案測試了苦主的問題,lc85301大大說應該用awk解決,我也是用這工具...
如果確定要用每列開頭第一行的數據來決定要不要print出來這一列,可以這麼做:
awk '{if ($1==1 || $1==4 || $1==5){print $0}}' database.txt >> out.dat
$1代表每列的第一行,由於這個問題要用第一行做判斷故出此策,$0代表一整列.
out.dat 就會看到過濾的結果了。
--
◤ ◥ ◢ ◣
傑米,炸掉它吧。 ⊙▁⊙─ ─⊙▂⊙ 碰到問題,用C4就對了!
╰ ∕皿﹨ ◥皿◤ ╯
◥█◤◢ ◥ ︶◤
Adam Savage ◤ ︶ ◥◤ ﹨▼∕◥ James Hyneman
MYTHBUSTERS ◥ ◤\◥ by dajidali
--
Tags:
Linux
All Comments

By Rae
at 2014-03-14T07:08
at 2014-03-14T07:08

By George
at 2014-03-18T04:57
at 2014-03-18T04:57
Related Posts
Mint 16 KDE登入語系 & 輸入法

By Joe
at 2014-03-08T12:48
at 2014-03-08T12:48
VMware Player 無法安裝 Ubuntu

By Ivy
at 2014-03-08T05:16
at 2014-03-08T05:16
grep的用法

By William
at 2014-03-08T03:08
at 2014-03-08T03:08
grep的用法

By Mary
at 2014-03-07T23:36
at 2014-03-07T23:36
ssh,vpn有辦法向VNC一樣用listen連線嗎?

By Rachel
at 2014-03-07T23:21
at 2014-03-07T23:21