leetcode shell 4道題

最近在學習shell,  發現leetcode上shell的4道題還是比較不錯的,整理了一下

  • 193. Valid Phone Numbers 電話號碼匹配 easy
grep '^([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$\|^[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$' file.txt

開始還想着用if...else方式進行比較,處理起來比較複雜,後來才知道用正則匹配的方式一行代碼就解決了。

 

  • 195. Tenth Line 獲取文本中第10行 easy
sed -n 10p file.txt

 

  • 192. Word Frequency 單詞統計
awk '{for( i=1;i<=NF;i++) a[$i]++} END {for(i in a) print i, a[i]}' words.txt|sort -k2 -nr

注意單詞是從1-NF。-k2 表示按照第2列排序, -n表示按照數值排序,(不加,默認是按照字符串排序),-r表示倒序。

cat words.txt | tr -s ' ' "\n" | sort | uniq -c | sort -r | awk '{ print $2, $1 }' 

這個方法最快。

 

  • 194. Transpose File 對文件行列轉換

If file.txt has the following content:

      name age

      alice 21

      ryan 30

Output the following:

     name alice ryan

     age 21 30

awk '

{

    for (i = 1; i <= NF; i++) {

        if (FNR == 1) {

            t[i] = $i;

        } else {

            t[i] = t[i] " " $i

        }

    }

}

END {

    for (i = 1; t[i] != ""; i++) {

        print t[i]

    }

}

' file.txt

 

NF 表示一行中的空格分隔的字段數

NR 表示當前讀取的行號,從1開始

FNR 也表示當前讀取的行號,但對於awk多個文件時,每個文件都從1開始計數,但是NR會連續計數

END { 這兩個不能分隔開。

print $0 表示整行

$1,$2,...表示一行中第一個字段,第二個字段,...

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章