【发布时间】:2022-01-14 15:44:48
【问题描述】:
我有一个包含不同列的 CSV,其中一列包含电子邮件。该脚本应根据列生成一个字符串,并将其作为附加列添加到 CSV。目前脚本贯穿每一行并形成字符串。但我想要的是,该脚本只构建具有相同电子邮件地址的行字符串。棘手的是,我不知道不同的电子邮件地址,因此我无法对其进行硬编码并对其进行动态分组。
有什么方法可以构建它?
这是我的初始 CSV:
42342;home;2020-01-12;2020-01-13;test@test.com
45235;home;2020-04-12;2020-04-13;test@test.com
68787;photo;2020-05-12;2020-05-13;email@test.com
68787;test;2020-05-12;2020-05-13;moritz@test.com
68787;test;2020-05-12;2020-05-13;moritz@test.com
68787;test;2020-05-12;2020-05-13;moritz@test.com
CSV 最后应该是什么样子:
42342;home;2020-01-12;2020-01-13;test@test.com;home 2020-01-12_2020-01-13 && home 2020-04-12_2020-04-13
45235;home;2020-04-12;2020-04-13;test@test.com;home 2020-01-12_2020-01-13 && home 2020-04-12_2020-04-13
68787;photo;2020-05-12;2020-05-13;email@test.com;photo 2020-05-12_2020-05-13
68787;test;2020-05-12;2020-05-13;moritz@test.com;test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13
68787;test;2020-05-12;2020-05-13;moritz@test.com;test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13
68787;test;2020-05-12;2020-05-13;moritz@test.com;test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13 && test 2020-05-12_2020-05-13
这是我的 bash 脚本:
getPhotosCommand(){
com=""
header="ID;DIR;START_DATE;END_DATE"
while read line; do
IFS=';' read -r -a array <<< "$line"
dir=${array[2]}
start_date=${array[3]}
end_date=${array[4]}
newCom="$dir $start_date_$end_date && "
com=$com$newCom
done < $file_new_photos
echo $com
}
【问题讨论】:
-
输入是否按电子邮件排序?
-
不,不是。
-
您可以使用
sort -t$';' -k5 ur_file按电子邮件地址对文件进行排序。您可以使用sort -t$';' -u -k5 ur_file | cut -d ';' -f 5获取 uniq 电子邮件地址