am a beginer of shell Unix, plesase tell me how to get parameter with $perl in loop
$ perl -lne '$/="DOCEND";print $_."DOCEND" if /$ACC/' file_input > output
i can't get parameter in loop with perl fucntion like this
pass paramerter to $ACC not accept in this script
$ACC = paramerter to find in text file_input / Ex. $ACC = ("KRAI","MARK")
EX.file_input
DOCSTART
DFSDF
NAME FIRSTNAME
ADDRESS
DSAFFD
DOCEND
DOCSTART
VEDFDSF
NAME KRAI
ADDRESS
SDFDSG
DOCEND
DOCSTART
LOUI
NAME ROBERT
ADDRESS
GHHW
DOCEND
DOCSTART
YYUI
NAME MARK
ADDRESS
LKJL;
DOCEND
DOCSTART
SAFD
NAME BEN
ADDRESS
8OIP
DOCEND
I need out put from loop with $perl like below
output text file
DOCSTART
VEDFDSF
NAME KRAI
ADDRESS
SDFDSG
DOCEND
DOCSTART
LOUI
NAME MARK
ADDRESS
GHHW
In order to pass shell variables to a Perl one-liner, use double quotes instead of single quotes.
Have a look at the following testcase that I set up to mimic your scenario:
$
$ # list the contents of data files - "file_input1" and "file_input2"
$ cat file_input1
DOCSTART
DFSDF
NAME ADAM
ADDRESS
DSAFFD
DOCEND
DOCSTART
VEDFDSF
NAME KRAI
ADDRESS
SDFDSG
DOCEND
DOCSTART
YYUI
NAME MARK
ADDRESS
LKJL;
DOCEND
DOCSTART
SAFD
NAME BEN
ADDRESS
8OIP
DOCEND
$
$ cat file_input2
DOCSTART
DFSDF
NAME ADAM
ADDRESS
DSAFFD
DOCEND
DOCSTART
VEDFDSF
NAME KRAI
ADDRESS
SDFDSG
DOCEND
DOCSTART
YYUI
NAME MARK
ADDRESS
LKJL;
DOCEND
DOCSTART
LOUI
NAME ROBERT
ADDRESS
GHHW
DOCEND
$
$ # show what's in the list file
$ cat listfile.txt
KRAI|file_input1
MARK|file_input2
$
$ # display the content of the Bash shell script
$ cat getnameblock.sh
#!/usr/bin/bash
while read I
do
ACCT=`echo ${I} |awk -F'|' '{print $1}'`
GMF=`echo ${I} |awk -F'|' '{print $2}'`
perl -lne "BEGIN {\$/=\"DOCEND\"} print \"\$_\",\"DOCEND\" if /$ACCT/" ${GMF}
done < listfile.txt
$
$ # now execute the shell script
$ ./getnameblock.sh
DOCSTART
VEDFDSF
NAME KRAI
ADDRESS
SDFDSG
DOCEND
DOCSTART
YYUI
NAME MARK
ADDRESS
LKJL;
DOCEND
$
$