Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 比较两列并减去它们_Awk - Fatal编程技术网

Awk 比较两列并减去它们

Awk 比较两列并减去它们,awk,Awk,我的问题 我有一个文件 344 0 465 1 729 2 777 3 676 4 862 5 766 0 937 1 980 2 837 3 936 5 我需要比较每两对(零对零,一对一等等)如果值存在(第二列的任何值都应该存在两次)减去766-344,937-465等等,如果不存在像第四个值什么都不做(4存在一次所以什么都不做)输出 422 472 251 060 074 我还需要添加索引 范例 最后,我需要将此代码作为tcl脚本的一部分或tcl程序的函数添加 我

我的问题

我有一个文件

344  0
465  1
729  2
777  3
676  4
862  5

766  0
937  1
980  2
837  3
936  5
我需要比较每两对(零对零,一对一等等)如果值存在(第二列的任何值都应该存在两次)减去766-344,937-465等等,如果不存在像第四个值什么都不做(4存在一次所以什么都不做)输出

422
472
251
060
074
我还需要添加索引 范例

最后,我需要将此代码作为tcl脚本的一部分或tcl程序的函数添加

我有一个tcl脚本,包含如下awk函数

  set awkCBR0 {
    {
    if ($1 == "r" && $6 == 280) {
    print $2, i  >> "cbr0.q";
             i +=1 ;
           }
    }
    }

    exec rm -f cbr0.q 
    exec touch cbr0.q

exec awk $awkCBR0 cbr.trq
谢谢

试试这个:

awk 'a[$2]{printf "%d %03d\n",++x,$1-a[$2];next}{a[$2]=$1}' file
输出

我将留给您将其添加到
tcl
函数中

试试这个:

awk 'a[$2]{printf "%d %03d\n",++x,$1-a[$2];next}{a[$2]=$1}' file
输出


我将留给您将其添加到
tcl
函数中

酷。。我不知道变量可以像这样用作模式(我一直在写像
a[$2]!=”{body}
)酷。。我不知道变量可以像这样作为模式使用(我一直在写
a[$2]!=“{body}
$ awk 'a[$2]{printf "%d %03d\n",++x,$1-a[$2];next}{a[$2]=$1}' file
1 422
2 472
3 251
4 060
5 074