awk 줄 검색 및 단어 바꾸기가 제대로 작동하지 않습니다.

awk 줄 검색 및 단어 바꾸기가 제대로 작동하지 않습니다.
$ cat test.txt
#Instance|job_or_Box_name|Status | to_be_checked_for_T_or_F|Time_to_check|DaysTo_be_checked|Timezone |already_checked|Mail mesasge
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|N|MDS price for pcb 
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0600|123|BST|N| BW RTB Enterprise Services

나는 이런 출력을 얻고 싶다

#Instance|job_or_Box_name|Status | to_be_checked_for_T_or_F|Time_to_check|DaysTo_be_checked|Timezone |already_checked|Mail mesasge
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|Y|MDS price for pcb 
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0600|123|BST|N|BW RTB Enterprise Services

두 번째 행(변수)과 필드 8이 변경됩니다. 나는 시도했다:

v="2"
line="P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|Y|MDS price for pcb"
awk -v v=$v -v v2=$line 'BEGIN { FS="|" ; OFS="|" }  $0 ~ v2 {$8 = "Y" ; print $0 }'  test.txt

하지만 제대로 작동하지 않고 각 행의 8번째 열을 변환합니다. 또한 시도

awk -v v=$v -v v2=$line 'BEGIN { FS="|" ; OFS="|" }  /v2/ {$8 = "Y" ; print $0 }'  test.txt

하지만 작동하지 않습니다 ..

답변1

노력하다

LINE="P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|N|"
awk -v v2="$line" 'BEGIN { FS=OFS="|" }  index($0,v2) {$8 = "Y" ; } {print;}' file.txt

어디

  • index($0,v2)온라인으로 전체 라인 필드를 검색합니다. ( NR==v라인 번호 검색을 선호하는 경우 이를 다음으로 대체할 수 있습니다.)
  • 일치하는 항목이 발견되면 $8변경됩니다 .
  • 다음 모드 인쇄 필드

관련 정보