2013-08-05 26 views
9

Tôi có tệp nguồn là tập hợp nhiều tệp đã được hợp nhất với nhau. Kịch bản của tôi được cho là để tách chúng thành các tệp riêng lẻ ban đầu.Làm cách nào để giữ lại khoảng trắng hàng đầu bằng tiếng vọng trên tập lệnh trình bao?

Bất cứ khi nào tôi gặp phải dòng bắt đầu bằng "FILENM", điều đó có nghĩa là đó là khởi đầu của tệp tiếp theo.

Tất cả các dòng chi tiết trong các tệp đều có chiều rộng cố định; vì vậy, tôi hiện đang gặp phải sự cố trong đó một dòng bắt đầu với khoảng trắng hàng đầu bị cắt ngắn khi nó không được cắt ngắn.

Làm cách nào để tăng cường tập lệnh này để giữ lại khoảng trắng hàng đầu?

while read line   
do   
    lineType=`echo $line | cut -c1-6` 
    if [ "$lineType" == "FILENM" ]; then 
     fileName=`echo $line | cut -c7-` 
    else 
     echo "$line" >> $filePath/$fileName 
    fi 
done <$filePath/sourcefile 

Trả lời

18

Không gian hàng đầu bị xóa vì read chia nhỏ thông tin nhập thành từ. Để chống lại điều này, hãy đặt biến số IFS thành chuỗi trống. Như thế này:

OLD_IFS="$IFS" 
IFS= 
while read line   
do 
    ... 
done <$filePath/sourcefile 
IFS="$OLD_IFS" 
7

Để duy trì IFS biến bạn có thể viết while theo cách sau:

while IFS= read line 
do 
    . . . 
done < file 

Ngoài ra để bảo tồn backslashes sử dụng read -r tùy chọn.

+0

Bạn xứng đáng có một oscar cho điều đó. – xdevs23

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