pesquisa de linha awk e substituição de palavras não está funcionando corretamente

0
$ 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

Eu quero obter uma saída como

#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

Há uma mudança na segunda linha (variável) e no oitavo campo. Eu tentei:

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

Mas não funciona corretamente e converte a 8ª coluna para cada linha. Também tentei

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

mas não funciona ..

    
por kanoujiapraveen 16.09.2016 / 16:29

1 resposta

0

tente

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

onde

  • index($0,v2) pesquisará o campo da linha inteira on-line (pode ser substituído por NR==v se você preferir pesquisar o número da linha)
  • quando uma correspondência é encontrada, $8 é alterado,
  • próximos campos de impressão de padrões
por 16.09.2016 / 16:57

Tags