實用的四個shell程式設計題

onephone發表於2016-12-22

4個用來測試自己shell程式設計能力的題(面試題),同時也是比較實用的四個小指令碼。源自leetcode

1. 詞頻統計

統計文字content.txt中每個單詞的出現的頻率,不區分大小寫,不統計數字和符號

  • cat content.txt | awk '{for(i=1;i<=NF;i++){count[$i]++}} END{for(i in count){print i"\t" count[i]}}' | sort -k2nr | head -n 10
  • cat content.txt | tr '[:upper:]' '[:lower:]' | tr -cs '[:alpha:]' '\n' | sort | uniq -c | sort -rn | head -n 10

2. 合法號碼判斷

xxx-xxx-xxxx 或 (xxx) xxx-xxxx格式的為合法號碼

  • grep -E "^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$" file.txt
  • sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt
  • awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

3. 文字行列轉置

即寫一個指令碼,文字內容如下

one phone
1 2
wen feng

通過執行反轉指令碼後,輸出內容如下

one 1 wen
phone 2 feng

  • 可執行指令碼1
    awk '
    {
    for (i=1; i<=NF; i++) {
    if (NR == 1){
    tmp[i] = $i;
    } else {
    tmp[i] = tmp[i] " " $i;
    }
    }
    }
    END {
    for (i=1; tmp[i] != ""; i++){
    print tmp[i];
    }
    }' file.txt

  • 可執行指令碼2

    count=head -n 1 file.txt | wc -w

    for i in seq 1 $count
    do
    echo cut -d ' ' -f $i file.txt
    done

4. 顯示檔案file.txt的第n行資訊

  • awk 'NR==10' file.txt
  • awk '{ if(NR==10) print $0 }' file.txt
  • awk '{ if(NR==10) print}' file.txt
  • head -n 10 file.txt | tail -n 1 (當行數不小於10時,正確)
  • shell script

    count=0
    while read line && [ $count -le 10 ];do
    let 'count++'
    [ $count -eq 10 ] && echo $line && exit
    done < file.txt

5. 參考

leetcode

相關文章