也许这会有所帮助 -
[jaypal:~/Temp] cat tmp
2 118610455 P2_PM_2_5034 T <DUP:TANDEM> 40 . END=118610566;SVLEN=110;SVTYPE=TDUP;CIPOS=-100,55;CIEND=-56,100;IMPRECISE;DBVARID=esv7540;VALIDATED;VALMETHOD=CGH;SVMETHOD=RP
[jaypal:~/Temp] var=$(awk -v FS="[ ;=]" '{print $1,$4,$24}' tmp)
[jaypal:~/Temp] echo $var
2 118610455 118610566
FS 是awk's 内置变量。它默认为空格或制表符。由于您的行作为多个分隔符,将FS 设置为字符类有助于为每个分隔符拆分行。我们在这里定义的字符类是space、semi-colon 或equal。
可能感觉有点奇怪,但当我碰巧解析超过 1 个分隔符的行时,我将它用作我的调试工具来识别列。这就是我从你的电话中得到的——
[jaypal:~/Temp] awk -v FS="[ ;=]" '{for(i=1;i<=NF;i++) print "$"i" is "$i}' tmp
$1 is 2
$2 is
$3 is
$4 is 118610455
$5 is
$6 is
$7 is P2_PM_2_5034
$8 is
$9 is
$10 is
$11 is T
$12 is
$13 is
$14 is <DUP:TANDEM>
$15 is
$16 is
$17 is
$18 is 40
$19 is
$20 is .
$21 is
$22 is
$23 is END
$24 is 118610566
$25 is SVLEN
$26 is 110
$27 is SVTYPE
$28 is TDUP
$29 is CIPOS
$30 is -100,55
$31 is CIEND
$32 is -56,100
$33 is IMPRECISE
$34 is DBVARID
$35 is esv7540
$36 is VALIDATED
$37 is VALMETHOD
$38 is CGH
$39 is SVMETHOD
$40 is RP
你也可以通过下面的方式使用awk的一个简单的substr内置函数-
[jaypal:~/Temp] awk '{print $1,$2,$8=substr($8,5,9)}' tmp
2 118610455 118610566