Orz。illuz巨巨。。跟着大神一起刷。前言感谢。。

Shell篇 – 按难度总结

Tenth Line (Easy)

Description:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 10
Your script should output the tenth line, which is:
Line 10

My Solution:

1
2
3
# Read from the file file.txt and output the tenth line to stdout.

sed -n '10p' file.txt


Valid Phone Numbers (Easy)

Description:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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-7890
Your script should output the following valid phone numbers:
987-123-4567
(123) 456-7890

My Solution:

1
2
3
4
5
6
7
# Read from the file file.txt and output all valid phone numbers to stdout.

# grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt

# awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

sed -n '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt


Transpose File (Medium)

Description:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

My Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Read from the file file.txt and print its transposed content to stdout.
# illuz 巨巨的答案。。。

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


Word Frequency (Medium)

Description:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

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 is
Your script should output the following, sorted by descending frequency:
the 4
is 3
sunny 2
day 1

My Solution:

1
2
3
# Read from the file words.txt and output the word frequency list to stdout.

awk '{for(i=1;i<=NF;i++) print $i;}' words.txt | sort | uniq -c | sort -nr | awk '{print $2,$1}'