2つのデータファイルがあり、one.txt
Linuxtwo.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_CORRECT
1. 環境に変数がありません。