Extraindo valores de um arquivo de texto tendo | pipe como um delimitador no arquivo de texto usando o comando awk e Substituindo novas linhas com tag br usando sed?

0

Eu tenho um arquivo de texto no qual tenho 3 valores de seções separados por pipe. Meu arquivo de texto:

Saibal,Navnath,Taral,Sagar,Ankit,Prasham,Manika,Arvind,Gaurav,Abhijeet,Rohit,Madhu,Ganesh,Zahoor|
LSCRM:Abhijeet

MCRM:Zahoor

TLGAPI:Bhargav

MOM:Manika|
Prod :
No major activity were scheduled and no issues were reported throughout the week.
Last weekend on Sunday, we performed Full bounce. We are doing so to allow any USDOTT transaction during this window while they do code-fix (they need CRM available at all times).
Coming weekend, we have ordering client Ef deployment and CK External BLM Phase 2 activity scheduled on both APH and STL.

Non-Prod:
Over the week, we released 1710 CT11 K2view to build: 220 and Env TRN3 to 1707 Build:300.

Agora estou extraindo valores desse arquivo de texto usando o shell script e armazenando-o em uma variável shell e agora quero substituir o valor da variável shell por uma variável no meu arquivo HTML. Nesta substituição, eu quero substituir as novas linhas encontradas nos valores no arquivo de texto (armazenado na variável shell) com <br /> tag para que no meu arquivo HTML, a saída deve estar no mesmo formato que a entrada dada no arquivo de texto para todos as 3 seções.

Meu script de shell para extrair e substituir os valores é:

#! /bin/bash -x
file='/home/websphe/tomcat/webapps/MOM/mom.txt'
file1='/home/websphe/tomcat/webapps/MOM/web/mom.html'
common_path='/home/websphe/tomcat/webapps/MOM/web/'
if test -s $file
   then
cp $file1 $common_path/momcpy.html
attendees=$( awk 'BEGIN { RS = "|" } NR == 1 { print }' $file )
echo "$attendees"
agenda=$( awk 'BEGIN { RS = "|" } NR == 2 { print }' $file )
echo "$agenda"
lscrm=$( awk 'BEGIN { RS = "|" } NR == 3 { print }' $file )
echo "$lscrm"
perl -p -i -e "s#attendees#$attendees#g" $common_path/momcpy.html
perl -p -i -e "s#agenda#$agenda#g" $common_path/momcpy.html | sed -i'' 's|\n|<br/>|' $common_path/momcpy.html
perl -p -i -e "s#lscrm#$lscrm#g" $common_path/momcpy.html | sed -i'' 's|\n|<br/>|' $common_path/momcpy.html

Agora, aqui você pode ver a seção de participantes, não quero <br/> tag , pois não há uma nova linha na primeira seção, mas eu quero na seção de agenda e na seção lscrm. Nota: Nos participantes do script acima, agenda e lscrm são variáveis presentes em diferentes colunas de uma tabela no meu arquivo HTML onde eu quero substituir

perl -p -i -e "s#agenda#$agenda#g" $common_path/momcpy.html | sed -i'' 's|\n|<br/>|' $common_path/momcpy.html

Com a tentativa acima, <br/> tag é inserida no arquivo html completo e, portanto, devido a isso, minha tabela no arquivo html está bem alinhada no navegador chrome ou IE.

Quais alterações devem ser feitas no script acima para obter <br> tag somente na área de texto de entrada do usuário especificado não todo o arquivo de corpo HTML?

    
por Abhijeet Anand 10.09.2017 / 12:31

1 resposta

0

Você pode fazer sua substituição com awk . Substitua:

attendees=$( awk 'BEGIN { RS = "|" } NR == 1 { print }' $file )

com

attendees=$( awk 'BEGIN { RS = "|" } NR == 1 { print gensub("\n", "<br />", "g") }' $file )

Faça o mesmo para agenda e lscrm . Se você está usando o GNU awk e não quer a inicial e / ou final <br> , você pode jogar com o RS:

attendees=$( awk 'BEGIN { RS = "\n*\|\n*" } ...' $file )
    
por 10.09.2017 / 13:13