sedを使用してファイルの一部を別のファイルに抽出する

sedを使用してファイルの一部を別のファイルに抽出する

データファイルの一部を抽出して別のファイルに保存するスクリプトを作成したいと思います。スクリプトを作成しましたが、いくつかのエラーが発生します。スクリプトは

#!/bin/bash

nn=0
mn=0

for var1 in 1 2 3 ; do
    nn=nn+2
    mn=mn+302

    sed -n '$nn','$mn'p  dos.dat > $var1.dat

    nn=mn
done

答え1

スクリプトの即時の問題は、変数が一重引用符で囲まれているため、シェルから拡張できないことです。

sed -n '$nn','$mn'p dos.dat > $var1.dat

たぶんあなたはこれを意味するようです

sed -n "$nn,${mn}p" dos.dat > $var1.dat

2番目の変数が{とで区切られている場合は、}それを区切りますp

また、式の構文も問題です。 「=」の右側にある変数の値を取得するには、「$」が必要です。 '$((') を使用しない場合、または処理しない場合、右側は数字ではなくexpr文字列にすぎません。

たぶん、次の意味があります。

#!/bin/bash

nn=0 ; mn=0
for var1 in 1 2 3 ; do
    nn=$(($nn+2))
    mn=$(($mn+302))

    sed -n "$nn,${mn}p" dos.dat > $var1.dat

    nn=$mn
done

~によるとPOSIX、ここで '$'$((は必要ありません。次のいずれかを実行します。

シェル変数の場合xオプションとして、前のプラス記号またはマイナス記号を含み、その後に算術拡張が続く有効な整数定数を形成する値を含みます。"$((x))"そして"$(($x))"同じ値を返す必要があります。

関連情報