awkを使用して、現在の行と前の行フィールドの単純な数学演算の結果に基づいて文字列を印刷または省略します。

awkを使用して、現在の行と前の行フィールドの単純な数学演算の結果に基づいて文字列を印刷または省略します。
1529.89 1.05    22.36   48.78   33.8
1529.91 2.05    22.36   52.79   36.93
1529.92 3.06    22.36   52.80   36.93
1529.92 4.25    22.36   52.79   36.94
1529.92 5.10    22.36   52.79   36.94
1529.93 5.24    22.36   52.80   36.94
1529.94 6.05    22.36   52.80   36.94
1529.95 6.27    22.36   52.80   36.94
1529.95 7.01    22.36   52.80   36.94
1529.96 7.26    22.36   52.80   36.94
1529.97 8.11    22.36   52.80   36.94
1529.99 9.22    22.35   52.80   36.94
1530.00 10.12   22.36   52.80   36.94
1530.02 11.26   22.36   52.80   36.94
1530.03 12.18   22.36   52.80   36.94
1530.04 13.12   22.36   52.81   36.94
1530.06 14.04   22.36   52.81   36.95
1530.10 16.21   22.36   52.81   36.94
1530.11 17.17   22.35   52.80   36.94
1530.12 18.09   22.35   52.81   36.94
1530.14 19.19   22.35   52.81   36.94
1530.15 20.19   22.35   52.80   36.94
1530.17 21.24   22.35   52.81   36.94
1530.18 22.05   22.35   52.81   36.95
1530.20 23.14   22.35   52.81   36.95
1530.21 24.14   22.35   52.81   36.94
1530.23 25.23   22.35   52.80   36.94
1530.23 26.03   22.35   52.80   36.94
1530.23 26.24   22.34   52.80   36.94
1530.26 27.10   22.35   52.81   36.95

この種のファイルがあります。私が必要とするのは、2番目のフィールドの整数が前の行の2番目のフィールドの同じ数字と等しくない場合は、各行を印刷することです。たとえば、次の2行は次のようになります。

1529.94 6.05    22.36   52.80   36.94
1529.95 6.27    22.36   52.80   36.94

...最初の行だけを印刷し、2行目はスキップしたいと思います。 2番目のフィールド番号は約1300に増加してから1に減少します。

awk substr() 関数を試してみましたが、まだ機能しないようです。

awk -F. '{for (i=NR;i<3814;i++) {i=1 n=(substr($2,4))}{i=i+1 v=(substr($2,4))} {if ((n+v)%2=1) print $0} {i++}}' test.csv

ベストアンサー1

申し訳ありません。あなたのawk答えはまったく役に立ちません。あなたが表現した要件とは全く異なります。

  • フィールド区切り文字は「.」ではなく空白にすることができます。
  • 不要な10進解析substr()
  • 素数を整数に丸めるには、int()

したがって、コードは次のようになります。

awk 'int($2)!=prev{
  print
  prev=int($2)
}'

1行にするには「;」が必要です。

awk 'int($2)!=prev{print;prev=int($2)}'

結果:

1529.89 1.05    22.36   48.78   33.8
1529.91 2.05    22.36   52.79   36.93  
1529.92 3.06    22.36   52.80   36.93
1529.92 4.25    22.36   52.79   36.94
1529.92 5.10    22.36   52.79   36.94
1529.94 6.05    22.36   52.80   36.94
1529.95 7.01    22.36   52.80   36.94
1529.97 8.11    22.36   52.80   36.94
1529.99 9.22    22.35   52.80   36.94
1530.00 10.12   22.36   52.80   36.94
1530.02 11.26   22.36   52.80   36.94
1530.03 12.18   22.36   52.80   36.94
1530.04 13.12   22.36   52.81   36.94
1530.06 14.04   22.36   52.81   36.95
1530.10 16.21   22.36   52.81   36.94
1530.11 17.17   22.35   52.80   36.94
1530.12 18.09   22.35   52.81   36.94
1530.14 19.19   22.35   52.81   36.94
1530.15 20.19   22.35   52.80   36.94
1530.17 21.24   22.35   52.81   36.94
1530.18 22.05   22.35   52.81   36.95
1530.20 23.14   22.35   52.81   36.95
1530.21 24.14   22.35   52.81   36.94
1530.23 25.23   22.35   52.80   36.94
1530.23 26.03   22.35   52.80   36.94
1530.26 27.10   22.35   52.81   36.95

正しいですか?

おすすめ記事