Tôi muốn sử dụng AWK để xóa 8 cột đầu tiên khỏi đầu ra sau:
ls -l
lrwxrwxrwx 1 user user 23 jul 27 00:04 file1.pdf
-rw-rw-r-- 1 user user 107 may 8 13:59 file 2 with spaces.mp3
lrwxrwxrwx 1 user user 11 jul 24 19:43 file3-with-hyphens.txt
lrwxrwxrwx 1 user user 11 jul 24 19:43 and_another_file4_with_underscores.md
-rw-rw-r-- 1 user user 107 may 8 13:59 file 5 with way more spaces than the rest.mp3
và gửi kết quả đến một tệp văn bản. Tôi có thể làm điều đó bằng tay trong vim với khối chọn trực quan, tuy nhiên tôi muốn có một kịch bản để thực hiện tự động.
Nhìn xung quanh tôi đã có thể tìm thấy này trang ở đâu, bằng cách thay đổi các bộ phận liên quan của ví dụ 9 và đường ống đầu ra cho chính nó nhiều lần theo yêu cầu, tôi đã có thể để có được kết quả mong muốn, nhưng tôi cảm thấy rằng phải có một tốt hơn (thanh lịch hơn và / hoặc nhỏ gọn) để làm điều đó nhưng không thể tìm thấy nó hoặc tự mình tìm ra.
Mã cuối cùng của tôi là như sau:
awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 ~/file_folder_content.txt | awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 | ... | awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 >> ~/file_folder_content.txt
Lưu ý 1: Tôi hy vọng đầu ra thực tế từ ls
lệnh sẽ lớn hơn nhiều so với điều này.
Lưu ý 2: Tôi đã cố in trường thứ 9, nhưng vì một số tên tệp chứa khoảng trắng, nên điều này chỉ in từ đầu tiên trong tên tệp.
ls -l | tail -n +2 | column -tdN test -o "|" | cut -d "|" -f 9
- Nó chỉ in cột thứ 9. Phải có một cách tốt hơn nhưng hey, nó hoạt động, lol.
ls -1
làm điều đó