AWK は、一致する文字が出るまで行をスキップしてから計算を実行します。

AWK は、一致する文字が出るまで行をスキップしてから計算を実行します。

次の構造のファイルが2つあります。

ファイル1:

# Some comments on the file
# I am a line
# I am a new line
# I am yet a new line
 
# A value in the next line
123
Values
(
1
2
3
4
5
)

ファイル2:

# Some comments on the file
# I am a line
# I am a new line

# A value in the next line
123 
Values
(
1.1
2.1
3.1
4.1
5.1
)

予想される結果は絶対的な違いを持つファイルです。

0.1
0.1
0.1
0.1
0.1

2つのファイル間の括弧内の値の絶対的な違いを知りたいです。

現在、私は次の機能を持っています。

foo()
{
    paste $1 $2 | awk -F'\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs($1 - $2)}' > outputFile
}

これはうまくいきますが、すべてのファイルをチェックします。ヘッダーが一致しない場合、問題が発生します。開き括弧を見つけた後にのみ関数を適用するようにawkに指示する方法はありますか?

ありがとう

ベストアンサー1

関数を作成して使用する方法を既に知っているので、abs()ここに追加してください。

$ awk '
    /\(/{f=1; next} /)/{f=0} !f{next}
    NR==FNR { file1[++a]=$0; next }
    { print $0 - file1[++b] }
' file1 file2
0.1
0.1
0.1
0.1
0.1

おすすめ記事