1、tr -s 字符串1 字符串2 使用指定的字符串(字符串2)替换一个或多次连续出现的目标字符串(字符串1)
2、uniq -c : uniq用来对连续出现的行去重,-c 参数为计数
3、sed -n ‘10p’ file.txt 列出file.txt文件的第10行
4、nl -n ln filename | tail -n 10给filename这个文件加行号并输出最后10行
5、编写一段bash脚本计算文本文件words.txt中每个单词的频度。
为了使问题简化,你可以做如下假设:
words.txt中只包含小写字母和空格
每一个单词只由小写字母组成
单词之间以一个或者多个空格分隔
例如,假设words.txt包含下面的内容:
the day is sunny the the
the sunny is is
你的脚本应该输出下面的结果,按照单词频度倒序排列:
the 4
is 3
sunny 2
day 1
注意:
无需考虑并列排名的情况,测试样例确保每一个单词的频度都是唯一的。
答案:cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print
$2,$1}'
注意:不能是cat word.txt | tr -s ' ' '\n' | sort | uniq -c | awk '{ print $2, $1}' | sort -rn(原因不明)原因:应该是没有加-k选项,不知道是按哪个字段排序,所以出错
6、题目大意:
给定一个文本文件file.txt,包含一列电话号码(每行一个),写一个单行bash脚本输出全部有效的电话号码。
你可以假设有效的电话号码符合下列两种格式之一:(xxx) xxx-xxxx or xxx-xxx-xxxx. (x 代表数字)
同时也可以假设文本文件中的每一行都不包含前导或者后缀空格。
例如,假设file.txt包含下面的内容:
987-123-4567
123 456 7890
(123) 456-7890
你的脚本应该输出下列有效的电话号码:
987-123-4567
(123) 456-7890
答案:cat file.txt | grep -Eo '(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$|^([0-9]{3}-){2}[0-9]{4}$'
题目大意:
给定一个文本文件file.txt,将其内容进行转置。
你可以假设每行包含的列数相同,每一个字段都由' '字符隔开。
例如,如果file.txt包含下面的内容:
name age
alice 21
ryan 30
输出下面的内容:
name alice ryan
age 21 30
Bash脚本:
# Read from the file file.txt and print its transposed content to stdout.awk'
{
for (i = 1; i <= NF; i++) {
a[NR, i] = $i
}
}
NF > p { p = NF }
END {
for (j = 1; j <= p; j++) {
str = a[1, j]
for (i = 2; i <= NR; i++){
str = str " " a[i, j]
}
print str
}
}' file.txt
NF > p { p = NF } 意思是取得文件中的最大字段数并赋给p,每行都执行一次,p的初始值应该是“”,由于每行的字段数相同,所以这样也没问题。