我有以下数据:
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
我想要做的是根据第一列cow_id将1到1000之间的订单(在我的完整数据中)添加到名为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 :(得分: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
输出:
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
答案 1 :(得分:1)
做什么人'在任何Linux系统上你都应该得到一个新的手册页。虽然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()函数。