bash 刷題leetcode


題目一: 給定一個文本文件 file.txt,請只打印這個文件中的第十行。

示例:

假設 file.txt 有如下內容:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
你的腳本應當顯示第十行:

Line 10
說明:

  1. 如果文件少於十行,你應當輸出什么?
  2. 至少有三種不同的解法,請嘗試盡可能多的方法來解題。
# Read from the file file.txt and output the tenth line to stdout.
:<<EOF MMP 當講不當講
EOF

awk 'NR==10{print $0}' file.txt 

awk -F " " '{if(NR==10) print $0}' file.txt

cat -n file.txt | grep -E '^[[:space:]]+10' | awk '{print $2" "$3}'

nl file.txt | sed -n '10p' | sed -n 's/\n//p'

cat -n file.txt |sed -n 's/\n//p'| grep -E "^    10"

題目二:

給定一個文件 file.txt,轉置它的內容。

你可以假設每行列數相同,並且每個字段由 ' ' 分隔.

示例:

假設 file.txt 文件內容如下:

name age
alice 21
ryan 30
應當輸出:

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(NR==1){
            arr[i]=$i;
        }
        else {
            arr[i]=arr[i]" "$i;
        }
	}
}
END {
	for(i = 1;i <= NF;i++) {
		print arr[i];
	}
}' file.txt

題目三:

給定一個包含電話號碼列表(一行一個電話號碼)的文本文件 file.txt,寫一個 bash 腳本輸出所有有效的電話號碼。

你可以假設一個有效的電話號碼必須滿足以下兩種格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一個數字)

你也可以假設每行前后沒有多余的空格字符。

示例:

假設 file.txt 內容如下:

987-123-4567
123 456 7890
(123) 456-7890
你的腳本應當輸出下列有效的電話號碼:

987-123-4567
(123) 456-7890

# Read from the file file.txt and output all valid phone numbers to stdout.
awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

grep -E "^(([[:digit:]]{3}-){2}[[:digit:]]{4})$|^\([[:digit:]]{3}\)[[:space:]]+[[:digit:]]{3}-[[:digit:]]{4}$" file.txt

題目四:

寫一個 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
說明:

不要擔心詞頻相同的單詞的排序問題,每個單詞出現的頻率都是唯一的。
你可以使用一行 Unix pipes 實現嗎?

# Read from the file words.txt and output the word frequency list to stdout.
# sed "s/[^[:alpha:]]/\n/g" words.txt | sort -rn | uniq -c | sort -k 1 -r |awk '{print $2,$1}'

# cat words.txt |grep -io "\<[[:alpha:]]*\>" |sort -rn |uniq -c |sort -n
# awk '{i=1;while(i<=NF){print $i;i++}}' words.txt | sort -r | uniq -c | awk '{print $1" "$2}'

awk '{i=1;while(i<=NF){print $i;i++}}' words.txt \
  | sort | uniq -c \
  | sort -k1nr \
  |awk '{print $2 " " $1}'

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM