신청시
awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0}'
입력하다
Statements and Functions/399,Black,notBold
왜 출력이
Statements and Functions/402,Black,notBold
바꾸다
Statements and Functions 402 Black notBold
?
-F'[,/]'
awk가 입력을 읽을 수 있도록 필드 구분 기호를 또는FS
로 변경하세요.,
/
OFS
기본값은 공백입니다. 그렇다면print $0
모든 필드가 구분 기호로 연결되어 생성 되지 않는$1
경우 는 언제입니까 ?$NF
OFS
$0
변화
awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0}'
도착하다
awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); $1=$1; print $0}'
출력됩니다
Statements and Functions 402 Black notBold
입력용
Statements and Functions/399,Black,notBold
그렇다면 (필드에 할당하는 것 외에) 어떤 다른 상황을
$0
재형식화와 함께 사용할 수 있습니까OFS
?$0
형식을 다시 지정 하기 위해 필드를 변경해야 하는 경우OFS
그 이유는 무엇입니까?awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0; print $2; print $0}'
입력에 적용
Statements and Functions/399,Black,notBold
출력 표시값은 ? 에
$2
관계없이 변경됩니다 .$0
OFS
Statements and Functions/402,Black,notBold 402 Statements and Functions/402,Black,notBold
답변1
awk
필드를 강제로 다시 포맷하려면 필드가 변경되었는지 확인해야 합니다 OFS
. $0
귀하의 경우처럼 전체를 교체 한다면 awk
부품을 나누어서 다시 포맷할 필요가 없습니다.
상황이 변경되었음을 받아들이도록 하려면 다음과 같이 할 수 있습니다.
awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); $1=$1; print $0}'
이것은 $1=$1
실제로 작동합니다 :)
sub()
변경되지 않는다는 점에 유의하세요 $2
. 변경 사항을 검색 $0
하고 값으로 업데이트합니다 $2+3
. 그러나 업데이트되지 않고 $2
업데이트되므로 $0
재포맷이 실행되지 않습니다.
답변2
다음을 사용하면 더 나은 서비스를 받을 수 있다고 생각합니다.
awk -F'[,/]' '{$2=($2+3)}1' infile
infile은 다음과 같습니다.
$ cat infile
The Ubiquitous Backslash/49,Black
The Ubiquitous Backslash/17,Black
Statements and Functions/399,Black,notBold
당신은 얻을 것이다:
$ awk -F'[,/]' '{$2=($2+3)}1' infile
The Ubiquitous Backslash 52 Black
The Ubiquitous Backslash 20 Black
Statements and Functions 402 Black notBold
화타이