2012-11-23 11 views
5

बुनियादी Awk सवाल से चुनें इनपुट फ़ाइलों AWK, लेकिन मैं कहीं भी एक जवाब खोजने के लिए प्रतीत नहीं कर सकते हैं:सूची

मैं जहाँ से मैं चलाने के लिए AWK एक उपसमूह पर खोज करना चाहते हैं फ़ाइलें txt 50000 की एक फ़ोल्डर है, । मैंने उन फाइलनामों को सहेज लिया है जिन्हें मैं खोज को एक अलग दस्तावेज़ में सीमित करना चाहता हूं। यह बहुत खोज, जो इस समय इस तरह दिखता तेजी लाने जाएगा:

awk -F "searchTerm" '{print NF-1}' data/output/*>> output.txt 

बहुत धन्यवाद

उत्तर

1

मान लीजिए कि सबसेट है कि आप खोज करना चाहते हैं अपनी फ़ाइल subset.txt कहा जाता है और उसकी सामग्री इस प्रारूप है (एक अलग लाइन पर प्रत्येक फ़ाइल):

awk -F "searchTerm" '{print NF-1}' $(<subset.txt) >> output.txt 
:

file1.txt 
file2.txt 
file3.txt 
... 
fileN.txt 

फिर इस चाल करना होगा

स्पष्टीकरण:

  • $(<subset.txt) इनपुट के रूप में awk करने के लिए फ़ाइलों के सबसेट सूची की आपूर्ति करेगा। (नीचे जोनाथन Leffler की टिप्पणी देखें)

मैं भी कि -F "searchTerm" वास्तव में searchTerm को फील्ड सेपरेटर (प्रत्येक पंक्ति पर awk द्वारा प्रयोग किया जाता सीमक) स्थापित कर रही है का कहना है चाहिए। यदि आप "searchTerm" वाली प्रत्येक पंक्ति पर फ़ील्ड की संख्या मुद्रित करना चाहते हैं, तो करें:

awk '/searchTerm/ {print NF-1}' $(cat subset.txt) >> output.txt 
+1

बहुत बढ़िया, बहुत बहुत धन्यवाद, मुझे पता था कि यह आसान होना ही था =) –

+0

@RolfFredheim 'bash' में अद्यतन जवाब देखने =) –

+0

, आप (सबसेट' $ के साथ 'cat' प्रक्रिया से बच सकते हैं <। txt) 'जो उप-खोल और प्रक्रिया से बचाता है। –

0

मुझे लगता है कि यह आपके लिए काम करेगा।

awk '/searchTerm/{print $(NF-1)}' data/output/*>> output.txt 
0

यदि आपके पास filelist.txt नामक फ़ाइल में आपकी सूचियां हैं तो आप केवल बिल्ली कमांड से stdout का उपयोग कर सकते हैं।

awk -F "searchTerm" '{print NF-1}' `cat data/output/filelist.txt` >> output.txt`