วิธีหา คำต่างๆใน file โดยไม่สนใจว่าจะอยู่ที่ไหน

แบ่งปั่น วิธีการของผมในการหาข้อมูลใน file ต่างๆ บน Unix Linux ที่โดนบีบอัดข้อมูลไว้ หรือที่ยังไม่บีบอัดไว ก็สามารถประยุกต์เอามาใช้กันได้

บางครั้งเราไม่รู้ว่าไฟล์อยู่ที่ไหนบ้าง หรือรู้ แต่มันมีอยู่หลายๆที่ จะได้สะดวกในการค้นหา

วิธีที่ 1 ค้นหาไฟล์ ชื่ออะไรก็ตามที่ถูกบีบอัดไว(Zip) แล้วให้ exec และค้นหาคำที่เราต้องการ

1
2
3
$
$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
$

วิธีที่ 2

1
2
3
4
5
$
$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
$

เสริม ^_^

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
$

เพี่ยงเท่านี้เราก็หาอะไรได้ง่ายขึ้นแล้วครับ

Leave a Reply