linux正则匹配电话号码
cat file.txt | grep -Eo "^(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$|^([0-9]{3}-){2}[0-9]{4}$"
linux打印第N行
方法一:
awk 'NR==10' file.txt //awk的默认动作就是打印$0,所以NR==10后面可以不用加{print $0}
方法二:
sed -n '10p' file.txt //如果不够10行,则什么也不打印
方法三:
line=$(cat file.txt | wc -l) //千万注意,等号前后一定不要有空格
if [ "$line" -ge 10 ] ; then //$line的双引号也可以不用加
cat file.txt | head -n 10 | tail -n 1
fi
linux 统计单词数据并按频次降序
一行命令
方法一
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | awk '{print $2 " " $1}'
解释:
tr -s ’ ’ ‘\n’ 用换行替换空格,这样每一行就是一个单词了
sort -nr n是以数字排序 r是逆序(降序)
方法二:
awk '
{for(i=1;i<=NF;i++)
{s[$i]++;}
}
END{
for(i in s)
{print i " " s[i]}
}' words.txt | sort -nr -k 2
sort的k参数是以第几列来排序的意思
对于文本行按列聚合
awk '{
for(i=1;i<=NF;i++){
if(NR==1){ s[i]=$i;
}
else{ s[i]=s[i]" "$i;}
}
}
END{
for(i=1;s[i]!="";i++)
}' file.txt