awkのファイルからconstを引く方法は? [コピー]

awkのファイルからconstを引く方法は? [コピー]

txtファイルの各要素から1を引く方法。私は実際に次のようなことを試しました。これ問題が発生しましたが、成功しませんでした。

次の形式のファイルがあるとしましょう。

2,4,5
1,2,3
14,12,1

今私が欲しいファイルは

// basically subtract 1 from all 
1,3,4
0,1,2  
13,11,0

今まで試したことは

$awk '{if(getline != 0){
          for(i = 0; i <=NF; i++){
              $(i)=$(i)-1;
          }
       } print;}}'

各要素からファイルの終わりまで、下位 1 まで読み込もうとしますが、これにより -1 だけが得られます。

答え1

ロジックは正確ですが、いくつかの間違いをしました。

awk -vOFS=, -F, '{
      for(i = 1; i <=NF; i++ ){
          $i -= 1;
      }
      print;
   }' file.txt
  • getline(使用するように)次の行を読みます$0。ここでは意味がありません。

  • awkにコンマで分割(または使用)するように指示する必要があります。FSデフォルトでは空白に分割されます。-F

  • $0行全体なので、ループを開始しようとしています。i = 1

  • 出力にカンマを印刷するにはOFS=,(出力フィールド区切り記号)を設定する必要があります。

あるいは、Perlを使用することもできます。

perl -ple 's{(\d+)}{$1 - 1}eg;' file.txt

関連情報