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

관련 정보