我有这两个文件(都有标题),两个文件的每一行都以相同格式的第一列上的日期开头。分隔符是分号。
在第一个文件的第9列上,我只能具有以下ID:UK或JPN或EUR。
我需要将file2与文件2中的intel以及相应的日期intel进行聚合。
我当然可以尝试使用bash脚本和“ for”循环来做到这一点,但是我敢肯定,在资源方面,使用awk或bash命令会更好……如果可能! >
预先感谢您的提示。
ps:我尝试使用这种方法失败:https://unix.stackexchange.com/questions/428861/vlookup-equivalent-in-awk-scripting
第一个文件:
Date;$2;$3;$4;$5;$6;$7;$8;Id
2018-01-01; ;UK
2018-01-02; ;JPN
2018-01-03; ;EUR
2018-01-04; ;JPN
第二个文件:
Date;UKDIR;JPNDIR;EURDIR
2018-01-01;1;2;3
2018-01-02;4;5;6
2018-01-03;7;8;9
2018-01-04;11;10;12
预期收益
Date;$2;$3;$4;$5;$6;$7;$8;Id ;Intel
2018-01-01; ;UK ;1
2018-01-02; ;JPN ;5
2018-01-03; ;EUR ;9
2018-01-04; ;JPN ;10
答案 0 :(得分:1)
您可以使用此awk -F';' -v OFS='; ' 'NR==1 { for (i=2; i<=NF; i++) h[i]=$i; next }
FNR==NR { for (i=2; i<=NF; i++) a[$1,h[i]]=$i; next }
FNR==1 { print $0, "Intel"; next }
{ print $0, a[$1,$NF "DIR"] }' file2 file1
:
Date;$2;$3;$4;$5;$6;$7;$8;Id; Intel
2018-01-01; ;UK; 1
2018-01-02; ;JPN; 5
2018-01-03; ;EUR; 9
2018-01-04; ;JPN; 10
function getValueOfOrder(order){
var cards = document.getElementsByClassName("square");
for(i=0;i<cards.length;i++){
if(cards[i].style.order==order){
return(cards[i].dataset.value );
}
}
}
答案 1 :(得分:1)
请您尝试以下。
awk '
BEGIN{
count=count1=1
FS=OFS=";"
}
FNR!=NR && FNR==1{
print $0 OFS "Intel"
}
FNR==NR && /^[0-9]/{
a[$1]=$(++count)
count=count==4?1:count
next
}
NF && /^[0-9]/{
print $0 OFS a[$1]
count1=count1==4?1:count1
}
' second_file first_file
输出如下。
Date;$2;$3;$4;$5;$6;$7;$8;Id;Intel
2018-01-01; ;UK;1
2018-01-02; ;JPN;5
2018-01-03; ;EUR;9
2018-01-04; ;JPN;11
答案 2 :(得分:1)
n = 100;
DV = [-2 -1 0 1 2];
p = [.1 .2 .3 .3 .1]; % probability of each value. Sum 1, same size as DV
M = 10;
SDUD = sum(bsxfun(@times, DV, mnrnd(n, p, M)), 2);