2012-03-29 12 views
0

特定の行で変更したいファイルがあります。これでawkを使用してファイルの特定の行を変更します

#!/bin/bash/ 
cp /dir1/dir2/FILE_to_be_modified . ; 
var ="$1 $1 $1"; 
awk -v li=4 -v new="$var" '{ 
     if (NR==li) { 
        print new; 
     } else { 
       print $O; 
     } 
}' FILE_to_be_modified>>new_FILE 

私はFILE_to_be_modifiedの4行目を変更しますが、常に9 9 912 12 12のようなパターンを持つことができ、今私は9 9 11または12 12 14のようなものが欲しい:私はこれを使用していました。私は愚かで、var$1 $1 $1+2に変更するように考えました。 bcを使用する必要がありますか?

+1

をawkにするために、算術を引き渡すことができます。 –

答えて

3

バッシュ演算:

var = "$1 $1 $(($1 + 2))" 

the docsthe tutorialを見てください。

+0

ご協力いただきありがとうございました! 完全に機能しているとは言い切れません。 – ziulfer

1

var ="$1 $1 $1"と記述すると、ではなく、bashと入力して変数を展開します。 $1は、間違いなくawkbashの両方に意味を持ちます。ですから、あなたが今行うのは、スクリプトに渡された最初の引数が3回出現した行を置き換えることです。これを例えばvar ="$1 $2 $3"スクリプトに渡された最初の3つのパラメータを使用します。一方、awkのような最初のフィールドの値で行を置き換えることを目指す場合は、単一の引用符:var ='$1 $1 $1'を使用してください。この方法でbashを展開しない場合は、awkとなります。var ='$1 $2 $3'に変更すると、元の値の最初の3つのフィールドに置き換えられます(awk)。

0

また、あなたはシェバングラインから最後のスラッシュを削除する必要が

#!/bin/sh 
awk -v li=4 -v val="$1" ' 
    NR==li {print val, val, val+2; next} 
    {print} 
' /dir1/dir2/FILE_to_be_modified >> ./new_FILE 
関連する問題