我有一个|分隔文件,其中的每个名称$1都分配给$6. 文件按$5(升序)排序。
name_1|2018-09-28|1801-01-01|22|2018-11-19|group2117
name_1|2018-11-28|2018-11-28|81|2018-11-28|group1179
name_1|2018-09-28|2018-12-18|22|2018-12-14|group2117
name_4|2019-10-09|1801-01-01|22|2019-10-14|group3090
name_4|2019-10-09|2019-10-18|22|2019-10-15|group3090
name_4|2019-10-20|1801-01-01|21|2019-10-20|group3147
name_4|2019-10-20|2019-10-22|21|2019-10-21|group3147
name_11|2020-05-05|1801-01-01|21|2020-05-08|group4457
name_11|2020-05-05|2020-05-18|21|2020-05-18|group4457
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据现有列向该文件添加一些额外的列。
对于 中每个组的第一次出现$6,我想分别从$2和 中取出相应的值$4并将其添加到$7和 中$8。对于 中每个组的最后一次出现,$6从 中取出相应的值$3并将其添加到 中$9。所以输出看起来像这样
name_1|2018-09-28|1801-01-01|22|2018-11-19|group2117|2018-09-28|22|2018-12-18
name_1|2018-11-28|2018-11-28|81|2018-11-28|group1179|2018-11-28|81|2018-11-28
name_1|2018-09-28|2018-12-18|22|2018-12-14|group2117|
name_4|2019-10-09|1801-01-01|22|2019-10-14|group3090|2019-10-09|22|2019-10-18
name_4|2019-10-09|2019-10-18|22|2019-10-15|group3090|
name_4|2019-10-20|1801-01-01|21|2019-10-20|group3147|2019-10-20|21|2019-10-22
name_4|2019-10-20|2019-10-22|21|2019-10-21|group3147|
name_11|2020-05-05|1801-01-01|21|2020-05-08|group4457|2020-05-05|21|2020-05-18
name_11|2020-05-05|2020-05-18|21|2020-05-18|group4457|
Run Code Online (Sandbox Code Playgroud)
对于只有一组,$6我认为我可以应用以下代码,但我不确定如何采用它来获得我想要的结果
awk -F"|" 'NR==1 {if($6==group1179); print $0,$7=$2,$8=$4,$9=$3}' OFS="|" file
Run Code Online (Sandbox Code Playgroud)
输出
name_1|2018-11-28|2018-11-28|81|2018-11-28|group1179|2018-11-28|81|2018-11-28
Run Code Online (Sandbox Code Playgroud)
对于复杂的样本输入,请接受我的歉意。对此的任何领导都将受到高度赞赏。
我有以下文件:
ID|2018-04-29
ID|2018-04-29
ID|2018-04-29
ID1|2018-06-26
ID1|2018-06-26
ID1|2018-08-07
ID1|2018-08-22
Run Code Online (Sandbox Code Playgroud)
并使用 awk,我想添加$3基于$1和的重复 ID 分组,$2以便输出
ID|2018-04-29|group1
ID|2018-04-29|group1
ID|2018-04-29|group1
ID1|2018-06-26|group2
ID1|2018-06-26|group2
ID1|2018-08-07|group3
ID1|2018-08-22|group4
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但它没有给我所需的输出。另外,我不确定是否可以将其应用于包含日期的列。
awk -F"|" '{print $0,"group"++seen[$1,$3]}' OFS="|"
Run Code Online (Sandbox Code Playgroud)
任何有关如何使用 awk(如果可能,单行)实现它的提示将不胜感激。
awk ×2