我想从这张桌子
"ResNR";"ResNAME";"CustomerNAME";"CustomerID";"Date";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10272";"20.06.2017 10:35";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10207";"13.11.2017 14:08";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10328";"09.05.2018 09:22";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10189";"16.05.2018 17:47";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 3";"10189";"18.06.2018 20:07";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10229";"13.11.2018 11:14";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10348";"28.01.2019 09:06";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 3";"10340";"06.02.2019 11:13";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10349";"22.02.2019 17:06";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10333";"27.02.2019 20:18";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
输出应该是这样的 一切都应该按客户名称排序。可以删除前 2 列。然后计数器必须进入第一列
Sold;CustomerNAME;CustomerID;Date;Column1;_1;_2;_3;_4;_5;_6;_7;_8;_9;_10;_11;_12;_13;_14;_15;_16;_17;_18;_19;_20;_21;_22;_23;_24;_25;_26;_27
s01;Kunde 1;10272;20.06.2017 10:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s01;Kunde 1;10189;16.05.2018 17:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S01;Kunde 1;10229;13.11.2018 11:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s01;Kunde 1;10349;22.02.2019 17:06;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10207;13.11.2017 14:08;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10328;09.05.2018 09:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10348;28.01.2019 09:06;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10333;27.02.2019 20:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s03;Kunde 3;10189;18.06.2018 20:07;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s03;Kunde 3;10340;06.02.2019 11:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- 所有内容都应按第 2 列排序。
- 然后应删除第 1 列和第 2 列
- 应添加已售出列。(新)
- 然后在第 1 列(已售出)中,只要客户 1 在第 2 列中,就应在每一行中插入 wer s01。如果客户 2 在第二列中,则第一列中的值应从 s01 上升到 s02 , ETC
我现在正在尝试脚本,不幸的是它不起作用。
sed 's/,/./g' |
awk -F";" 'BEGIN{
oldRef=""
OFS="\t"
}{
if(NR==1){
$1=$1
}else{
if($4 != oldRef){$1="s01";oldRef=$4}else{$1="s02"}
}
print $0
}' | column -t -o ";" -s $'\t'
我不知道您的
Sold
专栏来自何处,但大部分内容都非常基础。man cut
将告诉您如何截断前两列。我不会让你悬念,它是cut -'d;' -f3-
。之后,客户名称位于第一列,因此
sort
可用于按正确顺序对其进行排序。您似乎也
"
从文件中删除了,因此sed 's/"//g'
也需要。所以,
除了生成缺失的列之外,它会做任何事情。
删除不匹配的尾随半场后
;"
,然后这里为列编号的“技巧”是我们尝试向流外映射
Sold
添加一个新条目,其键等于当前的 CustomerNAME,值比映射中的当前条目数多 1;@s
在重复键的情况下,函数mapsum
“更喜欢”右映射中的值。这可能是您使用强制性 POSIX 工具尝试做的事情: