Unix命令在点后解析2个字符

时间:2017-06-20 18:17:31

标签: unix awk sed grep

我有一个.txt文件(t1.txt),其中包含以下值。每组价值观。我需要做的是遍历每一行并解析Unix中第一个点后的前两个字符。

SBX00.GIATIC.-
SBX00.TIATIC.TTT.FAS.-
SBX00.SIATIC.SSBSC.CAMI.CRDT,SBX00.GIATIC.SSBSC.CAMI.ISITE
GB400.VIATIC.VQ051.CV750T1.D-,SB400.GIATIC.VQ051.CV902T1.D-,SB400.GIATIC.VQ051.CV902S1.D.-

我希望新文件看起来像:

GI
TI
SI,GI
VI,GI,GI

2 个答案:

答案 0 :(得分:5)

尝试:

sed -e 's/[^,.]*\.\(..\)[^,]*/\1/g' myfile.txt

测试:

echo "GB400.VIATIC.VQ051.CV750T1.D-,SB400.GIATIC.VQ051.CV902T1.D-,SB400.GIATIC.VQ051.CV902S1.D.-" \
| sed -e 's/[^,.]*\.\(..\)[^,]*/\1/g'

输出:

VI,GI,GI

答案 1 :(得分:1)

这是您可以使用的awk方法,

$ awk -F, '{for(i=1;i<=NF;i++){printf "%s",substr($i,index($i,".")+1,2); printf NF==i?"\n":","}}' myfile.txt
GI
TI
SI,GI
VI,GI,GI

简要说明:

  1. -F,:将字段分隔符设置为&#39;,&#39;
  2. substr($i,index($i,".")+1,2):在#39;后面提取2个字符。&#39;对于每个领域
  3. printf NF!=i?",":"\n":print&#39; \ n&#39;如果它是最后一个字段,请打印&#39;,&#39;否则。