2013-06-04 85 views
2

編輯:固定。現在關注優化代碼。獲取錯誤:sed:-e表達式#1,字符2:未知命令:`。'

我正在寫一個腳本來將數據從一個文件分離到多個文件中。當我運行腳本時,出現錯誤:「sed:-e表達式#1,字符2:未知命令:`。'」,沒有任何行號,這使得調試有點困難。我已經檢查了單獨使用sed的行,並且它們沒有問題。有任何想法嗎?我意識到,我做了很多事情,我做了一些非常規的事情,有更快的方式做某些事情(我確定有一種方法可以避免不斷導入某些文件),但現在我只是想了解這一點錯誤。下面是代碼:

x1=$(sed -n '1p' < somefile | cut -f1) 
y1=$(sed -n '1p' < somefile | cut -f2) 
p='p' 
for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 
do 
    x2=$(sed -n $i$p < somefile | cut -f1) 
    y2=$(sed -n $i$p < somefile | cut -f1) 
    if [ "$x1" = "$x2" ] && [ "$y1" = "$y2" ]; 
    then 
    x1=$x2 
    y1=$x2 
    fi 
    s="$(sed -n $i$p < somefile | cut -f3) $(sed -n $i$p < somefile | cut$ 
    echo $s >> "$x1-$y1.txt" 
done 

回答

1

這是問題的原因:

for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 

儘量只

for i in $(seq 1 $(wc -l < somefile)) 

但是,你正在閱讀您的文件很多,很多時候往往用所有這些sed命令。讀它只是一次:

read x1 y1 < <(sed 1q somefile) 
while read x2 y2 f3 f4; do 
    if [[ $x1 = $x2 && $y1 = $y2 ]]; then 
     x1=$x2 
     y1=$x2 
    fi 
    echo "$f3 $f4" 
done <somefile> "$x1-$y1.txt" 

,你構建s變量被截斷線 - 我假設你有每行4個領域。

注:與剪切和粘貼編碼的一個問題是,你介紹的錯誤:您指定y2同一個領域x2

+0

感謝。非常感激。您的更正也會顯着加快速度。 – user2452830

+0

現在它給了我:script2.sh:1:script2.sh:語法錯誤:重定向意外。知道這是爲什麼? – user2452830

+0

另外,我實際上並沒有剪切和粘貼。我只是忘記了我在看哪一個。謝謝你指出,雖然。我也沒有明白。 – user2452830

1

問題出在下面一行:

for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 

如果somefile將有3行,那麼這將導致以下值i

1..1 
2 
3 

顯然,so mething像​​會導致錯誤您所觀察:sed: -e expression #1, char 2: unknown command: '.'

您更希望:

for i in $(seq 1 $(cat "somefile" | wc -l)) 
+0

謝謝,沒有注意到 – user2452830

相關問題