Solutions, Leetcode Shell Problems TaoSama Aug 07, 2017

• 193. Valid Phone Numbers
• 195. Tenth Line
• 192. Word Frequency
• 194. Tranpose File

### 193. 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)

# Read from the file file.txt and output all valid phone numbers to stdout.
grep -E '^(([0-9]{3}-[0-9]{3}-[0-9]{4})|($[0-9]{3}$ [0-9]{3}-[0-9]{4}))$' file.txt  ### 195. Tenth Line How would you print just the 10th line of a file? # Read from the file file.txt and output the tenth line to stdout. line_num=0 while read line && ((line_num < 10)); do line_num=$line_num+1
if ((line_num == 10)); then
echo $line break fi done < file.txt  ### 192. Word Frequency # Read from the file words.txt and output the word frequency list to stdout. declare -A freq while read word; do ((++freq[$word]))
done < <(tr -s " " "\n" < words.txt)
# echo ${words[*]} for word in${!freq[*]}; do
echo $word${freq[$word]} done | sort -k 2nbr  it seems that there some problems with shell array… ➜ ~ a+=1 ➜ ~ a+=1 ➜ ~ echo${a[*]}
11
➜  ~ for i in ${a[*]}; do for> echo$i
for> done
11
➜  ~ for i in ${a[@]}; do for> echo$i
for> done
11
➜  ~ for i in "${a[@]}"; do for> echo$i
for> done
11
➜  ~ for i in "${a[*]}"; do for> echo$i
for> done
11
➜  ~ echo ${a} 1 ➜ ~ echo${a}
1
➜  ~ echo 'num of elemets='${#a[*]} num of elemets=2 # it looks rather werid... so avoid using it...  ### 194. Tranpose 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  # Read from the file file.txt and print its transposed content to stdout. awk ' { for(i = 1; i <= NF; ++i) { if(1 == NR) { s[i] =$i;
}
else {
s[i] = s[i] " " \$i
}
}
}
END {
for(i = 1; s[i] != ""; ++i) {
print s[i];
}
}' file.txt