如何使用shell脚本

时间:2016-03-15 15:43:40

标签: shell awk

我想获得具有唯一文件列组合的行的时差。

例如:

C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:00:56||I/O|12413508|2266556|2253044|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:02:11||Driver text|40|1048536|1048532|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:04:07||Processor|40750784|25825000|16768820|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:05:56||I/O|12413508|2266556|2253044|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:07:11||Driver text|40|1048536|1048532|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:09:07||Processor|40750972|25824812|16768820|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:10:56||I/O|12413508|2266556|2253044|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:12:11||Driver text|40|1048536|1048532|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:14:07||Processor|40750972|25824812|16768820|300

在上面这个文件样本中,我正在制作第1列和第7列的独特组合。并且找到下一个可用的相同组合的时间差,例如考虑第一行,我正在检查第1列和第7列的唯一组合&#39 ; C',' I / O'寻找下一个可用的组合。

C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:00:56||I/O|12413508|2266556|2253044|300

具有相同组合的下一个可用行

C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:05:56||I/O|12413508|2266556|2253044|300

这是我的试用代码,但我没有得到正确答案:

awk -F'|' 'BEGIN{OFS=FS} {k=$7 FS $7} k in a{print $1,$7,$5"-"a[k]} {a[k]=$5}'  'M02232016.IGA-US-TESTFEED.dat' times |  column -t -s'|' | grep '/' | sort -u | head

1 个答案:

答案 0 :(得分:0)

如果您要查找唯一组合的第二个实例,可以使用此

$ awk -F'|' '{a[$1,$7]++} a[$1,$7]==2' file

C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:05:56||I/O|12413508|2266556|2253044|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:07:11||Driver text|40|1048536|1048532|300
C|IGA LA TESTFEED|mpg-fa-29-9-AnacDu23.gdl.mex.ibm.com|03/07/2016|00:09:07||Processor|40750972|25824812|16768820|300

但是,也许你正在尝试别的东西。如果是这样,请更新原始帖子的详细信息。

以下是时间的成对差异

$ awk -F'|' 'BEGIN{OFS=FS}
                {k=$1 FS $7}
          k in a{print $1,$7,$5"-"a[k]} {a[k]=$5}' times | 
  column -t -s'|'

C  I/O          00:05:56-00:00:56
C  Driver text  00:07:11-00:02:11
C  Processor    00:09:07-00:04:07
C  I/O          00:10:56-00:05:56
C  Driver text  00:12:11-00:07:11
C  Processor    00:14:07-00:09:07

并计算秒数

$ awk -F'|' 'BEGIN{OFS=FS}
                  {k=$1 FS $7}
            k in a{split(a[k],p,":"); 
                   split($5,n,":"); 
                   t=((n[1]-p[1])*60+(n[2]-p[2]))*60+n[3]-p[3]; 
                   print $1,$7,$5"-"a[k],t} {a[k]=$5}' times | 
  column -t -s'|'          

C  I/O          00:05:56-00:00:56  300
C  Driver text  00:07:11-00:02:11  300
C  Processor    00:09:07-00:04:07  300
C  I/O          00:10:56-00:05:56  300
C  Driver text  00:12:11-00:07:11  300
C  Processor    00:14:07-00:09:07  300