2012-07-07 23 views
14

Khi tôi sử dụng Terminal để tìm mọi công việc đã được làm việc trên hai mươi bốn tiếng đồng hồ cuối cùng tôi nhận được một tập tin văn bản với các dòng như thế này:Tôi làm cách nào để đặt các tab trong các tệp văn bản từ Thiết bị đầu cuối?

ABC 12345 Job Làm việc vào ngày DATE

DEF 67.890 Một công việc vào ngày DATE

GHI 10112 Công việc cuối cùng vào DATE

Tệp văn bản này có thể lên tới hàng trăm dòng. Tôi phải chèn tất cả dữ liệu này vào một tabel trong Microsoft Excel. Để làm cho cuộc sống của tôi dễ dàng hơn, tôi muốn tìm ra cách thêm một tab vào mỗi dòng, sau các con số.

Something như thế này:

echo "ABC 12345 <tab> Job Worked on DATE" >> jobs.txt 
echo "DEF 67890 <tab> Another Job on DATE" >> jobs.txt 
echo "GHI 10112 <tab> Final Job on DATE" >> jobs.txt 

Làm thế nào tôi sẽ đạt được điều này?

+0

Có thể bạn không muốn không gian xung quanh các ký tự tab e. –

+0

Nó không cần phải là một nhân vật tab, trong MS excel bạn có thể chọn ký tự phân cách để nhập khẩu, bạn có thể chọn một cái gì đó có thể nhìn thấy như ',' hoặc ';' và chỉ chỉnh sửa tệp bằng các ký tự đó. – pizza

Trả lời

32

Sử dụng echo -e với \ t cho tab. Như thế này:

echo -e "ABC 12345 \t Job Worked on DATE" >> jobs.txt 
+1

Cờ -e làm gì? Khi tôi nói, nó chỉ cho tôi một lá cờ. – W3Geek

+2

@ W3Geek: Tùy thuộc vào phiên bản 'echo' bạn đang sử dụng. Lệnh 'echo' tích hợp của bash nhận ra' -e', cho phép giải thích các ký tự thoát-dấu gạch chéo nhất định, bao gồm '\ t' cho tab. Nhưng không phải tất cả các phiên bản của 'echo' làm điều này. Lệnh 'printf' là một lựa chọn tốt hơn - nhưng với điều kiện bạn đã có thông tin dưới dạng văn bản, thì tốt hơn nên chuyển đổi nó bằng cách sử dụng' sed', 'awk', hoặc một cái gì đó tương tự. –

+0

OK Tôi thấy cách hoạt động của cờ. =) Tuy nhiên, nó không xuất hiện trong 'tiếng vang' của tôi. Tôi không hiểu lệnh sed hoặc awk làm gì. – W3Geek

5

Bạn có thể nhấn tổ hợp phím Ctrl-vTab gõ một Tab thô.


Bạn cũng có thể sử dụng $'...' c-string cú pháp:

echo $'ABC 12345 \t Job Worked on DATE' >> jobs.txt 
+1

Có, nhưng vì OP có tất cả dữ liệu dưới dạng văn bản và chỉ cần chuyển đổi, nhập lại nó sẽ * không * là cách tiếp cận tốt nhất. –

+0

Bạn đúng @KeithThompson. Đây không phải là cách tiếp cận tốt nhất cho những gì tôi đang làm. Tôi đã chọn bài viết ở trên vì anh ấy là cách tiếp cận đơn giản nhất. – W3Geek

1

Nối một tab để lĩnh vực thứ hai:

awk '{$2 = $2 "\t"; print}' inputfile > outputfile 

tương tự, nhưng sử dụng một regex:

sed 's/[[:digit:]]\+/&\t/' inputfile > outputfile 
+0

Lệnh 'awk' và 'sed' làm gì? – W3Geek

+0

@ W3Geek: Cả hai bộ lọc chuyển đổi văn bản. 'awk' nói riêng là một ngôn ngữ lập trình đầy đủ (và' sed' được cho là tốt). Không thể giải thích chúng đầy đủ trong một bình luận. Hãy thử 'man sed' và/hoặc' man awk' nếu hệ thống của bạn có lệnh 'man' hoặc thực hiện tìm kiếm trên Google hoặc Wikipedia. –

+0

Lệnh 'sed' đó không hoạt động, ít nhất là không cho tôi (GNU sed 4.2.1). 'sed' không nhận ra các biểu thức chính quy mở rộng (cụ thể là' + 'qualifier) ​​theo mặc định.Và nếu nó đã làm, lệnh 's ///' của bạn sẽ * thay thế * một dãy số bằng một ký tự tab; bạn muốn * thêm * một ký tự tab. –

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