2016-03-03 34 views
-1

,我有以下数据:基于第一列记录数据的新科拉姆添加

Cow_ID Age DIM MY MCF MCP MCL Cow_Order 
26 1424 0 NA NA 0.0336 0.0505 
26 1425 1 NA 0.0404 0.0338 0.0505 
26 1426 2 NA 0.0388 0.0337 0.0505 
26 1427 3 NA 0.0391 0.0337 0.0505 
26 1428 4 35.2 0.0393 0.0337 0.0505 
35 1432 8 34.7 0.0396 0.0337 0.0505 
35 1433 9 33.6 0.0397 0.0337 0.0505 
35 1434 10 32.8 0.0397 0.0337 0.0505 
35 1435 11 33.7 0.0388 0.0337 0.0505 
47 1439 15 30.8 0.0391 0.0337 0.0505 
47 1440 16 31.3 0.0387 0.0337 0.0505 
47 1441 17 33.7 0.0392 0.0337 0.0505 
47 1442 18 30.2 0.0392 0.0337 0.0505 
47 1443 19 34.1 0.0393 0.0337 0.0505 
47 1444 20 33.3 0.0339 0.0286 0.0495 

我想什么做的是从1添加订单... 1000(在我的完整数据)到基于第一列cow_id命名Cow_Order列: 最终数据应该是这样的:

Cow_ID Age DIM MY MCF MCP MCL Cow_Order 
26 1424 0 NA NA 0.0336 0.0505 1 
26 1425 1 NA 0.0404 0.0338 0.0505 1 
26 1426 2 NA 0.0388 0.0337 0.0505 1 
26 1427 3 NA 0.0391 0.0337 0.0505 1 
26 1428 4 35.2 0.0393 0.0337 0.0505 1 
35 1432 8 34.7 0.0396 0.0337 0.0505 2 
35 1433 9 33.6 0.0397 0.0337 0.0505 2 
35 1434 10 32.8 0.0397 0.0337 0.0505 2 
35 1435 11 33.7 0.0388 0.0337 0.0505 2 
47 1439 15 30.8 0.0391 0.0337 0.0505 2 
47 1440 16 31.3 0.0387 0.0337 0.0505 3 
47 1441 17 33.7 0.0392 0.0337 0.0505 3 
47 1442 18 30.2 0.0392 0.0337 0.0505 3 
47 1443 19 34.1 0.0393 0.0337 0.0505 3 
47 1444 20 33.3 0.0339 0.0286 0.0495 3 

感谢

+0

这听起来像是awk或gawk的工作。 – Gilbert

+0

嗨吉尔伯特我试图寻找/为此想,但找不到我需要的东西。你能否给我多些提示。谢谢 – hieu

+0

@hieu你如何计算'Cow_Order'列?那里我看不到太多的逻辑。无论如何,这个任务可以用'awk'或任何脚本语言完成,比如perl,php,python等。你是否熟悉这些? – AlexM

回答

1

做 '人的awk',你应该得到一个新的手册页。虽然GNU的改进版本被称为gawk初学者,但两者之间可能并没有太大的区别,尽管先进的人肯定会这么做。

generate | awk ' 
     /Cow_ID/ {print "\t" $0, "Cow_Order"; next;} 
      { if ($1 != Cow_last) { 
       Cow_Order++; 
       Cow_last = $1; 
      } 
      print $0, Cow_Order 
      }'

如果你想格式化为整齐的列或许多其他方式,请查看awk的printf()函数。

1

如果与名testfile的文件中的数据,试试这个:

count=1;for cow_id in `awk '{if(FNR>1) print $1}' testfile |sort |uniq`; do awk -v cid=$cow_id -v orderid=$count '{if($1 == cid) {print $0"\t"orderid}} ' testfile; ((count++));done 

输出:任何Linux系统上

26 1424 0 NA NA 0.0336 0.0505   1 
26 1425 1 NA 0.0404 0.0338 0.0505  1 
26 1426 2 NA 0.0388 0.0337 0.0505  1 
26 1427 3 NA 0.0391 0.0337 0.0505  1 
26 1428 4 35.2 0.0393 0.0337 0.0505   1 
35 1432 8 34.7 0.0396 0.0337 0.0505   2 
35 1433 9 33.6 0.0397 0.0337 0.0505   2 
35 1434 10 32.8 0.0397 0.0337 0.0505   2 
35 1435 11 33.7 0.0388 0.0337 0.0505   2 
47 1439 15 30.8 0.0391 0.0337 0.0505   3 
47 1440 16 31.3 0.0387 0.0337 0.0505   3 
47 1441 17 33.7 0.0392 0.0337 0.0505   3 
47 1442 18 30.2 0.0392 0.0337 0.0505   3 
47 1443 19 34.1 0.0393 0.0337 0.0505   3 
47 1444 20 33.3 0.0339 0.0286 0.0495   3 
+0

嗨Cheny,它完美的工作!非常感谢你 – hieu

+0

@ hieu,那很好。请投我的答案,谢谢! – chenyb999

相关问题