如何在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

相关内容