SaltedPork
SaltedPork

Reputation: 377

Assign bash value from value in specific line

I have a file that looks like:

>ref_frame=1 
TPGIRYQYNVLPQGWKGSPAIFQSSMTKILEPFRKQNPDIVIYQYMDDLYVGSD
>ref_frame=2 
HQGLDISTMCFHRDGKDHQQYSKVA*QKS*SLLENKIQT*LSINTWMICM*DLT
>ref_frame=3 
TRD*ISVQCASTGMERITSNIPK*HDKNLRAF*KTKSRHSYLSIHG*FVCRI*
>test_3_2960_3_frame=1 
TPGIRYQYNVLPQGWKGSPAIFQSSMTKILEPSRKQNPDIVIYQYMDDLYVGSD

I want to assign a bash variable so that echo $variable gives test_3_2960

The line/row that I want to assign the variable to will always be line 7. How can I accomplish this using bash?

so far I have:

variable=`cat file.txt | awk 'NR==7'`

echo $variable = >test_3_2960_3_frame=1

Upvotes: 1

Views: 91

Answers (3)

Paul Hodges
Paul Hodges

Reputation: 15246

No pipes needed here...

$: variable=$(awk -F'[>_]' 'NR==7{ OFS="_"; print $2, $3, $4; exit; }' file)
$: echo $variable
test_3_2960

-F is using either > or _ as field separators, so your data starts in field 2.
OFS="_" sets the Output Field Separator, but you could also just use "_" instead of commas. exit keeps it from wasting time bothering to read beyond line 7.

Upvotes: 2

mrrobot.viewsource
mrrobot.viewsource

Reputation: 218

If you wish to continue with awk

   $ variable=$(awk 'NR==7' file.txt | awk -F "[>_]" '{print $2"_"$3"_"$4}')  
   $ echo $variable  
   test_3_2960 

Upvotes: 1

sseLtaH
sseLtaH

Reputation: 11207

Using sed

$ variable=$(sed -En '7s/>(([^_]*_){2}[0-9]+).*/\1/p' input_file)
$ echo "$variable"
test_3_2960

Upvotes: 3

Related Questions