2009-07-14 48 views
10

Tôi đang cố tạo từ điển các từ từ một tập hợp các tệp. Có cách nào đơn giản để in tất cả các từ trong một tệp, một từ trên mỗi dòng không?trích xuất các từ từ một tệp

+0

Bạn có cần ngôn ngữ lập trình nhất định không? – mkmurray

+2

@mkmurray, "shell", "scripting" và "unix" thường có nghĩa là bất kỳ công cụ nào có sẵn trên các hộp UNIX chuẩn - awk, grep, sed, perl, cut và cứ thế. – paxdiablo

Trả lời

21

Bạn có thể sử dụng grep:

  • -E '\w+' tìm kiếm cho từ
  • -o chỉ in phần của dòng phù hợp với
 
% cat temp 
Some examples use "The quick brown fox jumped over the lazy dog," 
rather than "Lorem ipsum dolor sit amet, consectetur adipiscing elit" 
for example text. 
# if you don't care whether words repeat 
% grep -o -E '\w+' temp 
Some 
examples 
use 
The 
quick 
brown 
fox 
jumped 
over 
the 
lazy 
dog 
rather 
than 
Lorem 
ipsum 
dolor 
sit 
amet 
consectetur 
adipiscing 
elit 
for 
example 
text 
 

Nếu bạn chỉ muốn in mỗi từ một lần, bỏ qua trường hợp, bạn có thể sử dụng sort

  • -u chỉ in mỗi từ lần
  • -f nói sort bỏ qua trường hợp khi so sánh từ
 
# if you only want each word once 
% grep -o -E '\w+' temp | sort -u -f 
adipiscing 
amet 
brown 
consectetur 
dog 
dolor 
elit 
example 
examples 
for 
fox 
ipsum 
jumped 
lazy 
Lorem 
over 
quick 
rather 
sit 
Some 
text 
than 
The 
use 
+0

cảm ơn! Tôi đã google trong một giờ cho việc này. Kỳ lạ thay, bằng cách sử dụng "... từ một tài liệu" thay vì "...từ một tập tin văn bản "mang lại cho tôi câu hỏi này là trận đấu đầu tiên – davka

+0

bạn có thể sử dụng ----> grep -o -E '\ w +' testfile.txt | sắp xếp -u -f | tee 5.txt <---- để wirte đầu ra vào một tập tin –

+0

jack yang: hoặc chỉ sử dụng chuyển hướng shell bình thường 'grep ... | sort -u -f> 5.txt' – rampion

3

Một khởi đầu tốt là chỉ cần sử dụng sed để thay thế tất cả các không gian với dòng mới, loại bỏ các dòng trống (một lần nữa với sed), sau đó sort với -u (uniquify) cờ để loại bỏ bản sao, như trong ví dụ này:

$ echo "the quick brown dog and fox jumped 
over the lazy dog" | sed 's/ /\n/g' | sed '/^$/d' | sort -u 

and 
brown 
dog 
fox 
jumped 
lazy 
over 
quick 
the 

Sau đó, bạn có thể bắt đầu lo lắng về dấu chấm câu và lượt thích.

3

lời giả định tách bằng dấu cách trắng

awk '{for(i=1;i<=NF;i++)print $i}' file 

hoặc

tr ' ' "\n" < file 

nếu bạn muốn độc đáo:

awk '{for(i=1;i<=NF;i++)_[$i]++}END{for(i in _) print i}' file 

tr ' ' "\n" < file | sort -u 

với một số punctuations gỡ bỏ.

awk '{ 
    gsub(/["*^&()#@$,?~]/,"") 
    for(i=1;i<=NF;i++){ _[$i] } 
} 
END{ for(o in _){ print o } }' file 
0

Lệnh tr có thể thực hiện việc này ...

tr [:blank:] '\n' < test.txt 

Điều này yêu cầu chương trình tr thay thế khoảng trắng bằng một dòng mới. Đầu ra là stdout, nhưng nó có thể được chuyển hướng đến một tập tin, result.txt:

tr [:blank:] '\n' <test.txt> result.txt 

Tham khảo here.

Các vấn đề liên quan