2016-09-01 3 views
0
file=$2 
isHeader=$true 
while read -r line; 
do 
    if [ $isHeader ] 
    then 
    sed "1i$line",\"BATCH_ID\"\n >> $file 
    else 
    sed "$line,1"\a >> $file 
    fi 
    isHeader=$false 
done < $1 

echo $file 

シェル。私はこれを試しましたが、うまくいきません。私はアイデアはありません、誰かが私を助けてくれますか?あなたが何をしたいかテキストと異なる文字列を追加し、私は文字列を追加したい最初の行で、私は残りの行に同じ文字列を追加したい他のラインにスクリプト

+1

あなたは何のエラーを得るのですか?簡単な入力(3〜4行)から出力として欲しいものの例を表示できますか? –

+0

最初の行はヘッダ、EX: "Name"、 "Date"、 "Number"ここでは、EXのためのPKになるテキストを追加したい: "ID"と他の行には、数。 –

答えて

0

私には全く明確ではないが、あなたは、単にsedの代わりにechoを使用し、各行の末尾にテキストを追加したい場合:

file=$2 
isHeader=1 
while read -r line; 
do 
    if [ $isHeader ] 
    then 
    #sed "1i$line",\"BATCH_ID\"\n >> $file 
    echo "${line},\"BATCH_ID\"\n" > $file 
    else 
    #sed "$line,1"\a >> $file 
    echo "${line},1\a" >> $file 
    fi 
    isHeader=0 
done < $1 

cat $file 
+0

また、 '$ isHeader'" boolean "を扱う方法を変更しました –

+0

?どうすれば変更できますか? –

+0

私はそれを変更しました: 'isHeader = $ true'' isHeader = $ false'はあなたのコードで間違っていました。私が提案したコードを試しましたか?それはあなたが期待していることをするようです。 –

0

受け入れられましたecho ... \aがベルを生成するので、答えは少し間違っています。また、awkまたはsedは正規表現をサポートしており、行単位で処理すると10倍高速です。ここでは、awkのである:sedので

#! /bin/sh 

script='NR == 1 { print $0 ",\"BATCH_ID\"" } 
     NR > 1 { print $0 ",1" }' 

awk "$script" $1 > $2 

が、それも簡単です:

sed '1 s/$/,"BATCH_ID"/; 2,$ s/$/,1/' $1 > $2 

はスピードのことは自分を納得させるために、これを自分で試してみてください。

$ time seq 100000 | while read f; do echo ${f}foo; done > /dev/null 
real 0m2.068s 
user 0m1.708s 
sys  0m0.364s 

$ time seq 100000 | sed 's/$/foo/' > /dev/null 
real 0m0.166s 
user 0m0.156s 
sys  0m0.017s 
関連する問題