先说一下适用的场景,市场部那边希望看到某些商品中“黄牛”用户的活动情况,以及“黄牛”使用代金券的情况,然后发一个excel文件过来,拿到文件先复制到notepad++中,格式类似:
id name
price
1 name1
price1
2 name2
price2
3 name3
price3
4 name4
price4
5 name5
price5
6 name6
price6
7 name7
price7
8 name8
price8
9 name9
price9
查询的时候根据ID查询,所以要把所有的ID组织到一行中,并写成(1,2...,8,9)的格式,这需要做如下件事:
第一,删除第一行标题,sed '1d' ids.txt ;
第二,只显示第一列, awk -F'\t' '{print $1}' ;
第三,把第一列以逗号分隔,tr '\n' ',' ;
第四,把第三步中的结果前后加上左右括号,sed 's/^/(/'。
把这四步组在一起,执行:sed '1d' ids.txt | awk -F'\t' '{print $1}' | tr '\n' ',' | sed 's/,$/);/' | sed 's/^/(/' > ok.txt
就得到了(1,2,3,4,5,6,7,8,9);
然后再写个sql和这个文件拼接上就OK了。此处对于数据量小的时候效果不明显,当处理几千万数据,一个文本有几个G的时候,
LINUX强大的处理文本的功能就显示出来了。
id name
price
1 name1
price1
2 name2
price2
3 name3
price3
4 name4
price4
5 name5
price5
6 name6
price6
7 name7
price7
8 name8
price8
9 name9
price9
然后根据TAB键分列,并输出"select name from tb where id =" 和第一列,然后在文件的结尾加上分号,最后重定向到文件就可以了:
sed '1d' ids.txt | awk '{print "select name from tb where id =" $1}' | sed 's/$/;/' > idsInline.sql
如果是想把ID信息放在条件中,可以
sed '1d' ids.txt | awk '{print "select name from tb where id =" $1 " and expire_time > now() and status = 0 " }' | sed 's/$/;/' > ok.sql
针对返回的结果进行排序:
cat total.urls.alipayUserId | awk -F"\t" {'print $2 "\t" $1 "\t" $3'} | sort -nr > sortedAlipayUserId.txt

本文介绍如何利用Linux命令行工具(如sed、awk、tr等)批量处理文本文件,将其转换为适用于SQL查询的格式,适用于处理大量数据场景。通过简单的步骤,将文本文件中的ID信息转换为SQL所需的查询条件,实现高效的数据筛选和操作。
1万+

被折叠的 条评论
为什么被折叠?



