shell 字符串处理

一. 字符串截取

1. 关键字(词)截取

  • # 号截取,删除左边字符,保留右边字符
var=http://www.aaa.com/123.htm
echo ${var#*//} # 从左边开始删除第一个 // 号及其左边的所有字符
# 输出为 www.aaa.com/123.htm
  • ## 号截取,删除左边字符,保留右边字符
var=http://www.aaa.com/123.htm
echo ${var##*/} # 从左边开始删除最后(最右边)一个 / 号及其左边的所有字符
# 输出123.htm
  • %号截取,删除右边字符,保留左边字符
var=http://www.aaa.com/123.htm
echo ${var%/*} # 从右边开始,删除第一个 / 号及其右边的字符
# 输出 http://www.aaa.com
  • %% 号截取,删除右边字符,保留左边字符
var=http://www.aaa.com/123.htm
echo ${var%%/*} # 从右边开始,删除最后一个(最左边) / 号及其右边的字符
# 输出 http:

2. 定位截取

  • 从左边第几个字符开始,及字符的个数
var=http://www.aaa.com/123.htm
echo ${var:0:5} # 0 表示左边第一个字符开始,5 表示字符的总个数
# 输出 http:
  • 从左边第几个字符开始,一直到结束
var=http://www.aaa.com/123.htm 
echo ${var:5} # 5 表示左边第6个字符开始,一直到结束。 
# 输出 //www.aaa.com/123.htm
  • 从右边第几个字符开始,及字符的个数
var=http://www.aaa.com/123.htm 
echo ${var:0-7:3} # 0-7 表示右边算起第七个字符开始,3 表示字符的个数
# 输出 123
  • 从右边第几个字符开始,一直到结束
var=http://www.aaa.com/123.htm
echo ${var:0-7} # 从右边第七个字符开始,一直到结束
# 输出 123.htm

二. 字符串拼接

  • 字符串与字符串的拼接
echo "111""222"
# 输出 111222
  • 字符串与变量拼接
var="aaa"
echo "111"${var}
# 输出 111aaa

echo "111${var}" 
# 输出 111aaa
  • 变量与变量拼接
a="123"
b="456"
echo $a$b
# 输出 123456

三. 参考

FFM (Field-aware Factorization Machines)

一.简介

通过引入field的概念,FFM把相同性质的特征归于同一个field。FFM相对于FM加入了field的概念,每个特征的隐向量不再是只有一个,而是针对每个field学习一个独立的隐向量,防止互相影响

二.原理

连续特征,一个特征就对应一个Field (也可连续特征离散化,一个分箱成为一个特征);  离散特征,采用one-hot编码,同一种属性的归到一个Field。

以上文的表格数据为例,计算用户1的FFM组合特征:

算一下𝑦̂ 𝑣1,𝑓2的偏导

注意𝑥2,𝑥3,𝑥4是同一个属性的one-hot表示,即𝑥2,𝑥3,𝑥4中只有一个为1,其他都为0 (对于每个样本来说,同一个field下只有一个feature的值不是0,其他feature的值都是0)。在本例中𝑥3=𝑥4=0, 𝑥2=1,所以:

推广到一般情况:

𝑥𝑗属于Field 𝑓𝑗,且同一个Field里面的其他𝑥𝑚都等于0。实际项目中𝑥是非常高维的稀疏向量,求导时只关注那些非0项即可。

三.参考