แบ่งปั่น วิธีการของผมในการหาข้อมูลใน file ต่างๆ บน Unix Linux ที่โดนบีบอัดข้อมูลไว้ หรือที่ยังไม่บีบอัดไว ก็สามารถประยุกต์เอามาใช้กันได้
บางครั้งเราไม่รู้ว่าไฟล์อยู่ที่ไหนบ้าง หรือรู้ แต่มันมีอยู่หลายๆที่ จะได้สะดวกในการค้นหา
วิธีที่ 1 ค้นหาไฟล์ ชื่ออะไรก็ตามที่ถูกบีบอัดไว(Zip) แล้วให้ exec และค้นหาคำที่เราต้องการ
1
2
3
| $
$find [path] -type f -name [file name].gz -exec [command] {} \;|grep [key word for need]
$ |
$
$find [path] -type f -name [file name].gz -exec [command] {} \;|grep [key word for need]
$
Ex.
1
2
3
4
| $find . -name *.gz -exec gunzip -c {} \;|grep 101400004
$
$find . -type f -name *.gz -exec gunzip -c {} \;|grep 101400004
$ |
$find . -name *.gz -exec gunzip -c {} \;|grep 101400004
$
$find . -type f -name *.gz -exec gunzip -c {} \;|grep 101400004
$
วิธีที่ 2
1
2
3
4
5
| $
$find . -name *.gz -exec zgrep 101400004 {} \;|wc -l
$
$find . -name *.gz -exec zgrep 101400004 {} \;|wc -l
$ |
$
$find . -name *.gz -exec zgrep 101400004 {} \;|wc -l
$
$find . -name *.gz -exec zgrep 101400004 {} \;|wc -l
$
จากตัวอย่าง ให้หาจาก path ปัจจุบัน โดยหาไฟล์อะไรก็ตามที่ลงท้ายด้วย gz ถ้าเจอให้เข้าไปอ่านไฟล์ทั้งหมด โดยไม่ต้องแตก(unzip) แล้วให้ filter เฉพาะ “101400004”
หรือถ้าต้องการจะนับจำนวนคำที่เราพบ ให้เพิ่ม wc -l เข้าไป
Ex.
1
2
3
| $
$find . -name aaaa*.gz -exec gunzip -c {} \;|grep 101400004|wc -l
$ |
$
$find . -name aaaa*.gz -exec gunzip -c {} \;|grep 101400004|wc -l
$
เสริม ^_^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ find . -type f -name *.gz
./test/aaaa.txt.gz
./test/aaaa1.txt.gz
./test/aaaa2.txt.gz
./test/aaaa3.txt.gz
./test/aaaa4.txt.gz
$ find . -type f -name *.gz -exec gunzip -c {} \;|grep 101400004
101400004 test open windows
101400004 test open windows
101400004 test open windows
101400004 test open windows
101400004 test open windows
$ |
$ find . -type f -name *.gz
./test/aaaa.txt.gz
./test/aaaa1.txt.gz
./test/aaaa2.txt.gz
./test/aaaa3.txt.gz
./test/aaaa4.txt.gz
$ find . -type f -name *.gz -exec gunzip -c {} \;|grep 101400004
101400004 test open windows
101400004 test open windows
101400004 test open windows
101400004 test open windows
101400004 test open windows
$
เพี่ยงเท่านี้เราก็หาอะไรได้ง่ายขึ้นแล้วครับ