すべての正の値を負の値に、またはその逆に変更しますが、2つの異なるファイルから

すべての正の値を負の値に、またはその逆に変更しますが、2つの異なるファイルから

2つのデータファイルがあり、one.txtLinuxtwo.txtシステムにあります。すべての正の値を負にone.txt変換するか、その逆に変換したいのですが、two.txt最初の列でのみ可能です。データにはゼロも含まれています。

one.txt次のようになります。

   10 35.74
    8 35.74
    6 35.74
    4 35.74
    2 35.74
    0 35.74 

two.txtこのように

    -20 35.74
    -18 35.74
    -16 35.74
    -14 35.74
    -12 35.74
     -0 35.74

one.txt私はこれを次のように変更したいと思います:

   -10 35.74
    -8 35.74
    -6 35.74
    -4 35.74
    -2 35.74
    -0 35.74

同様に、負の値をすべて正の値に変更したいと思います。two.txt

私はそれを試しましたが、awk '$1 *= -1' file.txtゼロをめちゃくちゃにしました。

この2つの問題は、2つの異なるプロセスで実行する必要があります。だから私は1つのステップで解決するのではなく、各問題に対して2つの異なるソリューション/コードを使用することを好みます。

ベストアンサー1

試みを少し変えると効果があります。

awk '{ $1 *= -1 } 1' file.txt

問題は、awk '$1 *= -1'これが$1 *= -1条件として扱われることです。その効果は適用されますが条件になるため、結果がゼロでない場合にのみ処理された行が出力されます。

中かっこを追加すると、すべての行に乗算が適用され、それ自体ですべての行1が印刷されます。空行を変更したくない場合は、乗算に条件を追加できます。

awk 'NF { $1 *= -1 } 1' file.txt

Gawk1を使用している場合は、最初の列を変更する前に数字であることを確認できます。

awk 'typeof($1) == "strnum" { $1 *= -1 } 1' file.txt

POSIXLY_CORRECT1. 環境に変数がありません。

おすすめ記事