2011-12-06 45 views
5

Tôi có hai tập tin văn bản có cấu trúc này:Kết hợp các cột từ các tập tin khác nhau

Tập 1

Column1:Column2 
Column1:Column2 
... 

Tập 2

Column3 
Column3 
... 

Tôi muốn tạo ra một tệp có cấu trúc tệp này:

Column1:Column3 
Column1:Column3 
... 

mở cho bất kỳ lời đề nghị, nhưng nó sẽ được tốt đẹp nếu các giải pháp có thể được thực hiện từ một vỏ Bash, hoặc sed/awk/perl/vv ...

Trả lời

11
cut -d: -f1 "File 1" | paste -d: - "File 2" 

này cắt lĩnh vực 1 từ Tệp 1 (được phân tách bằng dấu hai chấm) và dán nó vào cột duy nhất trong Tệp 2, tách các trường đầu ra bằng dấu hai chấm.

4

Đây là giải pháp awk. Nó giả định file1 và file2 có số dòng tương đương nhau.

awk -F : '{ printf "%s:",$1; getline < "file2"; print }' < file1 
2

Kể từ khi triển khai thực hiện bash tinh khiết chưa được đề nghị, cũng giả định một số lượng tương đương của dòng (bash chỉ v4):

mapfile -t file2 < file2 

index=0 
while IFS=: read -r column1 _; do 
     echo "$column1:${file2[index]}" 
     ((index++)) 
done < file1 

bash v3:

IFS=$'\n' read -r -d '' file2 < file2 

index=0 
while IFS=: read -r column1 _; do 
     echo "$column1:${file2[index]}" 
     ((index++)) 
done < file1 
Các vấn đề liên quan