192. Word Frequency
Write a bash script to calculate the frequency of each word in a text file words.txt
.
For simplicity sake, you may assume:
words.txt
contains only lowercase characters and space' '
characters.- Each word must consist of lowercase characters only.
- Words are separated by one or more whitespace characters.
For example, assume that words.txt
has the following content:
the day is sunny the the the sunny is isYour script should output the following, sorted by descending frequency:
the 4 is 3 sunny 2 day 1
Note:
Don't worry about handling ties, it is guaranteed that each word's frequency count is unique.
统计各个单词的出现的次数。先用tr把单词都分成单独的行。然后用gawk统计每个单词的个数,最后用sort根据第二个值(也就是个数)从大到小排序:
cat $1 | tr -s ' ' '\n' | gawk '{count[$1]++}END{for(word in count) print word,count[word]}' | sort -rn -k2
Given a text file file.txt
that contains list of phone numbers (one per line), write a one liner bash script to print all valid phone numbers.
You may assume that a valid phone number must appear in one of the following two formats: (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)
You may also assume each line in the text file must not contain leading or trailing white spaces.
For example, assume that file.txt
has the following content:
987-123-4567 123 456 7890 (123) 456-7890Your script should output the following valid phone numbers:
987-123-4567 (123) 456-7890
Subscribe to see which companies asked this question.
判断给出的号码是否是合法的号码。用gawk配合正则表达式来匹配:
cat file.txt | gawk --re-interval '/^(\([0-9]{3}\)[ ]|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/{print $0}'
194. Transpose File
Given a text file file.txt
, transpose its content.
You may assume that each row has the same number of columns and each field is separated by the ' '
character.
For example, if file.txt
has the following content:
name age alice 21 ryan 30
Output the following:
name alice ryan age 21 30
Subscribe to see which companies asked this question.
相当于矩阵的转置,用line数组记录下每一列,然后输出每一列即可。这里要注意的是每一行最后不能有空格:
gawk '{
for(i=1; i<=NF; ++i)
{
if(line[i] == "")
{
line[i]=$i
}
else
{
line[i]=line[i]" "$i;
}
}
}
END{
for(i=1; i<=NF; ++i)
{
print line[i]
}
}
' file.txt
195. Tenth Line
How would you print just the 10th line of a file?
For example, assume that file.txt
has the following content:
Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10Your script should output the tenth line, which is:
Line 10