2012-03-29 2 views
0

특정 행에서 수정하려는 파일이 있습니다. 내가 지금은 9 9 11 또는 12 12 14 같은 것을하고 싶습니다, 9 9 912 12 12 같은 패턴으로 항상 FILE_to_be_modified의 4 행을 수정 할 수도 있지만 이것으로awk를 사용하여 파일의 특정 행을 변경하십시오.

#!/bin/bash/ 
cp /dir1/dir2/FILE_to_be_modified . ; 
var ="$1 $1 $1"; 
awk -v li=4 -v new="$var" '{ 
     if (NR==li) { 
        print new; 
     } else { 
       print $O; 
     } 
}' FILE_to_be_modified>>new_FILE 

: 나는 이것을 사용했다. 나는 어리 석다. var$1 $1 $1+2으로 바꾸는 것을 생각했다. bc을 사용해야합니까?

+1

이 오두막 줄에서 후행 슬래시를 제거해야 awk가하는 연산을 넘겨 수 있습니다. –

답변

3

배쉬 연산 :

var = "$1 $1 $(($1 + 2))" 

the docsthe tutorial에서보세요.

+0

도움과 링크를 보내 주셔서 대단히 감사합니다 !!! 완벽하게 작동한다고 말할 필요는 없다고 생각합니다. – ziulfer

1

var ="$1 $1 $1"을 쓸 때 이 아닌 bash을 입력하고 변수를 확장하십시오. $1은 우연히 awkbash에 모두 의미가 있습니다. 이제 스크립트로 전달 된 첫 번째 인수가 3 번 나오는 줄을 바꾸십시오. 예를 들어 var ="$1 $2 $3" 스크립트에 전달 된 첫 번째 3 개의 매개 변수를 사용합니다. 반면, awk에 표시된 첫 번째 필드의 값으로 행을 바꾸는 것이 목표이면 작은 따옴표 var ='$1 $1 $1'을 사용하십시오. 이렇게하면 bash은 확장되지 않으며 awk으로 변경되며이 값을 var ='$1 $2 $3'으로 변경하면 원래 값의 처음 3 개 필드로 바뀝니다 (awk과 같이).

0

또는,

#!/bin/sh 
awk -v li=4 -v val="$1" ' 
    NR==li {print val, val, val+2; next} 
    {print} 
' /dir1/dir2/FILE_to_be_modified >> ./new_FILE 
관련 문제