2012-10-16 54 views
7

Có cách nào kết hợp lệnh 'head -1' và 'grep' vào một cho tất cả các tệp trong thư mục và chuyển hướng đầu ra đến tệp đầu ra. Tôi có thể làm điều này bằng cách sử dụng 'sed' nhưng có vẻ như nó không phải là nhanh như grep.Bao gồm tiêu đề trong kết quả 'grep'

sed -n '1p;/6330162/p' infile*.txt > outfile.txt 

Sử dụng grep tôi có thể làm một trong những tập tin sau đây tại một thời điểm:

head -1 infile1.txt; grep -i '6330162' infile1.txt > outfile.txt 

Tuy nhiên, tôi cần phải làm điều đó cho tất cả các file trong thư mục. Việc chèn ký tự đại diện không giúp ích vì nó đang in đầu trang trước và sau đó là đầu ra grep.

+0

Tất nhiên nó không phải là nhanh như grep; grep đang làm ít hơn. –

Trả lời

1
for file in * 
do 
    [ "$file" = outfile.txt ] && continue 
    head -n 1 "$file" 
    grep -i '...' "$file" 
done > outfile.txt 
+0

Cảm ơn @Ignacio. Tôi cũng thêm tên tệp để theo dõi nơi dữ liệu đến từ tệp đầu ra và do đó đã thêm 'tệp' $ file "; '. Tuy nhiên, trong đầu ra nó được gắn 'ASCII văn bản' cho ví dụ: file1.txt: ASCII văn bản – Curious

+0

Vâng, đó là những gì 'file' hiện ... –

0

Hi Tò mò bạn có thể sử dụng xarg với cmd của mình.

find /mahesh -type f |xargs -I {} -t /bin/sh -c "head -1 {}>>/tmp/out.x|grep -i 6330162 {} >>/tmp/out.x" 

đâu/mahesh là dir trong đó tập tin của bạn đang có và sản lượng được đặt bên /tmp/out.x

20

Sau đây nghĩa là bạn chỉ cần gõ lệnh một lần (thay vì sử dụng & & và gõ nó hai lần), nó cũng khá đơn giản để hiểu.

some-command | { head -1; grep some-stuff; } 

ví dụ:

ps -ef | { head -1; grep python; } 

CẬP NHẬT: Điều này dường như chỉ hoạt động với ps, xin lỗi, nhưng tôi đoán đây thường là những gì mọi người muốn.

+0

NB: Điều này dường như làm việc với' ps', nhưng không phải bất kỳ lệnh nào khác (df, ls, mèo, v.v.) –

+0

@BrianPapantonio Có, không có ý tưởng tại sao đó là, khá lạ. Bạn có biết tại sao? – samthebest

+1

Khi điều tra thêm, tôi thấy nó hoạt động với 'ps -e' nhưng không phải là' ps'. Rõ ràng 'ps -e' đang gửi dòng tiêu đề đầu tiên, sau đó không gửi bất cứ điều gì, sau đó đệm phần còn lại của đầu ra. 'head' phải nghĩ rằng luồng được đóng sau dòng đầu tiên, vì vậy nó thoát ra, để lại grep để xem phần còn lại. tl; dr: Thủ thuật này hoạt động một cách tình cờ. –

0

tôi sẽ làm điều đó:

ps -fe | awk '{ if (tolower($0) ~ /network/ || NR == 1) print $0}' 
Các vấn đề liên quan