2013-05-12 30 views
6

Tôi không thể tìm thấy một câu trả lời tốt và đơn giản cho câu hỏi này không phải trên google cũng không ở đây trên stackoverflow.Làm thế nào để in hai mảng cạnh nhau với tập lệnh bash?

Về cơ bản tôi có hai mảng mà tôi cần in vào đầu cuối cạnh nhau vì một mảng là danh sách các thuật ngữ và định nghĩa của các thuật ngữ khác. Có ai biết một cách tốt để làm điều này?

Xin cảm ơn trước.

+0

Sử dụng mảng kết hợp? – jordanm

Trả lời

6

Bạn có thể sử dụng một C-style cho vòng lặp để thực hiện điều này, giả sử cả hai mảng đều giống nhau chiều dài:

for ((i=0; i<=${#arr1[@]}; i++)); do 
    printf '%s %s\n' "${arr1[i]}" "${arr2[i]}" 
done 
8

Dưới đây là một "one-liner":

paste <(printf "%s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}") 

này sẽ tạo các dòng bao gồm một thuật ngữ và một dấu phân tách được phân tách bằng một tab, có thể không, nói đúng, là "cạnh nhau" (vì chúng không thực sự trong các cột). Nếu bạn biết cách rộng cột đầu tiên nên được, bạn có thể sử dụng một cái gì đó như:

paste -d' ' <(printf "%-12.12s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}") 

mà sẽ pad hoặc cắt ngắn các từ ngữ đến 12 ký tự chính xác, và sau đó đặt một khoảng cách giữa hai cột thay vì một tab (-d' ').

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