2011-11-25 48 views
0

我想複製行從一個文件到另一個到文件字符串:和寫入前導空格

count=1 
while read -r i 
do  
    echo $i 
    ((count++)) 
done < "file1" > file2 

,但如果他們在我沒有得到任何線前導空格的文件2文件1。

回答

3

這是因爲IFS(內部字段分隔符)的值會去掉這些空格。我相信,默認情況下它會根據空格和換行符進行分隔。解決方法是臨時設置IFS等於換行符。

#!/bin/bash 

IFS=" 
" 

count=1 

while read -r i || [[ -n "$i" ]] 
do 
    echo $i 
    ((count++)) 
done < "file1" > file2 

unset IFS 
+0

謝謝!還有一個問題:在這個循環中,如果原始文件中的文本的最後一個字符串後面沒有沒有被複制到file2的換行符。我能做些什麼? – WHITECOLOR

+0

我已經編輯了我的答案來解決這個問題。該值將被讀入該變量,但該時段將退出。這解決了這個問題。 – Buggabill

+0

非常感謝你=) – WHITECOLOR

1

這裏的另一種方法:

sed -n p <file1> file2 ; count=$(wc -l file2) 
+0

謝謝我必須複製不是所有字符串 – WHITECOLOR

1

可以使用line命令:

count=1 
while i=$(line) 
do  
    echo "$i" 
    ((count++)) 
done < "file1" > file2 

然而,這是比read顯著慢,因爲read是一個bash內置和line是可執行文件。

+0

謝謝。但是,唯一不是nix的,而是Windows。 =) – WHITECOLOR