192. Word Frequency
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print $2" "$1}'
tr -s: 使用指定字符串替换出现一次或者连续出现的目标字符串(把一个或多个连续空格用换行符代替);
sort: 将单词从小到大排序;
uniq -c: uniq用来对连续出现的行去重,-c参数为计数;
sort -rn: -r 倒序排列, -n 按照数值大小排序;
awk '{ print $2, $1 }': 格式化输出,将每一行的内容用空格分隔成若干部分,$i为第i个部分。
193. Valid Phone Numbers
cat file.txt | grep -Eo '^(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$|^([0-9]{3}-){2}[0-9]{4}$'
^(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$ 匹配形如(123) 456-7890的电话号码
^([0-9]{3}-){2}[0-9]{4}$ 匹配形如987-123-4567的电话号码
194. Transpose File
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){
print s[i];
}
}' file.txt
和C语言类似
NF:每一行拥有的字段总数,即:列
NR:目前awk所处理的是“第几行”数据,即:行
195. Tenth Line
awk:
awk 'NR == 10' file.txt
sed:
sed -n "10p" file.txt