Các ô tham chiếu trong cột .csv từ dòng lệnh


0

Tôi có một cột B trong my.csv trong đó mỗi ô tham chiếu tên tệp của tài liệu trong một thư mục source_directory/.

Tôi muốn lấy từng tên đó để tôi có thể sử dụng chúng làm đối số cho các lệnh shell khác (như cp ).

Thay thế lý tưởng list.txt sau đây với nội dung của cột B trong my.csv

cp $(<list.txt) target_directory

Câu trả lời:


1

Còn cái này thì sao:

for i in `awk -F, '{print $2}' my.csv`; do cp "$i" target_directory; done

Lệnh awk là chìa khóa; -F, nói sử dụng dấu phẩy làm dấu tách trường và sau đó nó có thể in ra trường thứ hai.

Để bỏ qua dòng đầu tiên:

for i in `awk -F, 'NR==1{next} {print $2}' my.csv`; do cp "$i" target_directory; done

Cảm ơn, đã thử kiểm tra điều này với for i in `awk -F, '{print $2}' my.csv`; do echo $1; done nhưng chỉ nhận được dòng trống là đầu ra. Bất kỳ suy nghĩ những gì tôi có thể làm sai?
Meltemi

Đó phải là echo $ i không lặp lại $ 1 ở cuối; phần "for $ i" khi bắt đầu thiết lập biến shell i lần lượt là từng tên tệp.
nickcrabtree

Bạn có thể biết cách bỏ qua hàng tiêu đề để nó không được bao gồm không? Thật không may, tiêu đề hàng tiêu đề của tôi có 2 khoảng trắng trong đó để nó dịch sang 3 dòng đầu tiên của $i
Meltemi

Ngoài ra, chạy vào vấn đề bạn đề cập với không gian; cần một cách giải quyết phù hợp với máy Mac
Meltemi

0

Nếu bạn biết số cột, hãy thử:

cut -d, -f2 my.csv | {while read filename; do cp "$filename" target_dir/ ; done}

Giả sử bạn muốn cột số 2 và không có dấu phẩy trong các chuỗi được trích dẫn cần bỏ qua.


Có dấu phẩy trong cột 1 đang tạo ra sự cố với giải pháp của @ nickcrabtree.
Meltemi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.