sed が sed: -e 式 #(数値), char(数値): 不明なコマンド: `(文字)' を発生させます。

sed が sed: -e 式 #(数値), char(数値): 不明なコマンド: `(文字)' を発生させます。

私はいくつかのファイルを読み込み、このファイルのすべてのデータを他のマージされたファイルにコピーするシェルスクリプトを作成しました。

これは複数回発生し、以前にコピーしたデータは再コピーされません。これを行うには、最後にコピーした行を別のファイルに保存し、2番目から比較します。

論理フロー:

  • 最初は単一のファイルを読み取り、最後の行を除くデータ全体をマージされたファイルにコピーします。最後にコピーした行を一時ファイルに保存します。

sed '$d' $file >> $consolidatedCSVFile

tail -2 $file | head -1 > $consolidatedCSVFile$lastLines/$(basename $file)$lastLine

  • 2番目から、一時ファイルの最後の行を読み取り、単一のファイルからその行を検索します。見つけたら、次の行のすべての行をインポートしてマージされたファイルに追加します。

フルスクリプト:

#!/bin/bash

consolidatedCSVFile=$1
endTime=$2

curdate=$(date +%s)

CSVFiles=${@:3}
CSVFiles=${CSVFiles[@]}

lastLines=_LASTLINES
lastLine=_LASTLINE

newMerge=false

# Returns 1 if Consolidated file is empty
[ -s $consolidatedCSVFile  ]
if [ $? == 1  ]
    then
        mkdir $consolidatedCSVFile$lastLines
        newMerge=true
fi

testInProcess=false

if [ $endTime -ge $curdate  ]
    then
        testInProcess=true
fi

for file in $CSVFiles
do
if $newMerge ;
    then
        touch $consolidatedCSVFile$1astLines5(basename $file)$lastLine
        sed $d $file >> $consolidatedCSVFile
        tail -2 $file | head -1 >   $consolidatedCSVFile$1astLines5(basename $file)$lastLine
    else
        availableLastLine="`cat $consolidatedCSVFile$1astLines/$(basename $file)$lastLine`"
        if $testInProcess
            then
                sed '1,/^'"$availableLastLine"'$/d' $file | sed '$d' >> $consolidatedCSVFile
                tail -2 $file | head -1 > $consolidatedCSVFile$1astLines5(basename $file)$lastLine
            else
                sed '1,/^'"$availableLastLine"'$/d' $file >> $consolidatedCSVFile
        fi
fi

done

if  !  $testInProcess ;
then
    rm -rf $consolidatedCSVFile$lastLines
fi

時にはエラーメッセージが表示されます。sed: -e expression #1, char 26: unknown command: 'X'

私の考えでは

JMeterで生成されたファイルをマージしようとしています。時々、これらのファイルは次のデータを生成します。1439459065780,5,SOAP/XML-RPC Request,200,OK,ws test 1-3,text,true,267,3,3,5

私の考えの問題sed '1,/^'"$availableLastLine"'$/d' $file | sed '$d' >> $consolidatedCSVFileSOAP/XML。スラッシュ(/)はここで問題を引き起こす可能性があります。

答え1

availableLastLine 後で動作するように修正されましたavailableLastLine=$(sed 's/\//\\\//' $consolidatedCSVFile$lastLines/$(basename $file)$lastLine)

関連情報