항목이 특정 문자로 시작하는 경우 필드를 다른 필드로 바꿉니다.

항목이 특정 문자로 시작하는 경우 필드를 다른 필드로 바꿉니다.

다음과 같은 파일이 있는 경우:

223 898 teeth
223 899 mouth
223 900 r9
445 800 round

내 질문은 열 3이 문자 "r"로 시작하는 행에 대해서만 awk 명령을 사용하여 열 2를 열 3으로 바꿀 수 있는 방법입니다. 교체를 위해 gsub를 사용할 수 있지만 세 번째 열이 "r"로 시작하는 행만 가져올 수는 없습니다.

또한 r로 시작하는 단어를 찾기 위해 grep을 사용해 보았습니다.

grep "r*" filename | awk '{gsub($2,$3); print;}'

그러나 이 명령은 열 2를 행의 모든 ​​열로 바꿉니다.

답변1

노력하다:

$ awk '$3 ~ /^r/ {$2 = $3}1' file
223 898 teeth
223 899 mouth
223 r9 r9
445 round round

&를 awk사용하지 않고도 검색과 인쇄를 하나의 명령으로 결합합니다 . 위의 명령은 세 번째 필드가 로 시작하는 행만 찾습니다 . 이 경우 게임 2 대신 게임 3이 사용됩니다.grepawk$3 ~ /^r/rawk

후행이 1혼란스러우면 다음과 같이 하세요. true로 평가되어 awk기본 작업이 수행됩니다 { print $0 }.

인용하다

관련 정보