Thứ Năm, 7 tháng 2, 2013

Bài giải Shell: Bài 6 Text Parsing


Bài tập: Text Parsing

1. Tìm số sinh viên có tên bắt đầu bằng "Ng" và kết thúc bằng "t".
cat test | sed '1d' | awk '{print $2}' | grep ^Ng | grep t$ > out
echo -n Tong so sinh vien tim thay: >>out | cat out | wc -l >>out

2. Tìm số sinh viên có số điện thoại có 10 số, số bắt đầu là 0122
a=$(cat test | sed '1d' | awk '{print $3}' | grep '^0122[0-9]\{6\}$' | wc -l)
echo Tong sinh vien co so dien thoai dung: $a

3. Kiểm tra số điện thoại của user nhập vào có đúng theo quy ước 38-1234567
read -p "Xin moi nhap so dien thoai: " a
b=$(echo $a | grep '[0-9]\{2\}-[0-9]\{7\}$' |wc -l)
if [[ $b = 0 ]]
then echo 'Ban nhap khong dung dinh dang!'
else echo 'Ban da nhap dung quy tac'
fi

4.  Thống kê số file và tổng kích thước các file đó của từng user trong thư mục
read -p "Xin nhap duong dan: " thumuc
if [[ -d $thumuc ]]
then
ls -l $thumuc | sed '1d'| awk '{print $3 " " $5}' | sort -n > out
tong=0
dem=0
cu=$(sed -n '1p' out | cut -f1 -d" ")
while read line
do
        moi=$(echo $line | awk '{print $1}')
        b=$(echo $line | awk '{print $2}')
        if [[ $moi != $cu ]]
       then
               echo -e "User $cu \t co $dem file, tong cong $tong byte"
               tong=$b
               dem=1
        else
        (( tong=$tong + $b ))
        (( dem = $dem + 1 ))
        fi
        cu=$moi
done<out
echo -e "User $moi \t co $dem file, tong cong $tong byte"
else echo "Thu muc khong ton tai!!"
fi

Cach giai ngan gon:
ds=$(ls -l | awk '{print $3}' | sed '1d' | sort -n | uniq)
for i in $ds
do
        sofile=$(ls -l | grep $i | wc -l)
        tongbyte=0
        j in $(ls -l | grep $i | awk '{print $5}')
        do
        (( tongbyte=$tongbyte + $j ))
        done
        echo "User $i co $sofile file va tong kich thuoc $tongbyte byte"
done


5. Đếm số kết nối đang kết nối đến port 80 của server (máy hiện tại hoặc server mà ta đang kết nối).
netstat -ntp | awk '{print $4}' | grep ":80" | wc -l

6. Đếm số máy đang kết nối đến port 25 của server, sắp xếp địa chỉ các máy theo thứ tự






  

7 nhận xét:

  1. Bài 1 chỉ cần:
    cat test | sed -n '/kh.*h/p' | echo "Tong so sinh vien tim thay la: `wc -l`"

    Trả lờiXóa
    Trả lời
    1. Uhm, cách này cũng hay và nhanh. Cách mình là viết từng bước cụ thể để các bạn dễ tham khảo. mà mình thấy code bạn nên cụ thể thêm cột nào, vs file có nhiều cột thì có thể kết quả sẽ bị sai lệch

      Xóa
  2. Bài 2:
    cat test | sed -n '/0123/p' | grep -w '[0-9]\{10\}' | echo "Tong so dien thoai tim thay la: `wc -l`"

    Trả lờiXóa
  3. Bài 3:
    while [ 1 == 1 ]
    do
    read -p "Nhap vao so username: " ten
    read -p "Nhap vao so dien thoai (vd: 38-sodienthoai): " sdt
    while [ 0 == 0 ]
    do
    varsdt=$(echo "$sdt" | grep -w '[3][8]-[0-9]\{7\}' | wc -l)
    if [[ ${varsdt} == 0 ]]
    then
    read -p "Ban da nhap sai, moi nhap lai: " sdt
    else
    break
    fi
    done
    echo "$ten:$sdt">>danhsach
    read -p "Ban co muon nhap tiep khong ? [y/n] " chon
    if [[ ${chon} == "n" ]]
    then
    break
    fi
    done
    echo "
    ==============================================
    Cac so da nhap la:

    `cat danhsach`"

    Trả lờiXóa
  4. các bạn giải hộ mình bài này với,
    Đề tài 14: Với các yêu cầu – cập nhật, tìm kiếm và hiển thị thông tin các sinh viên trong khoa của một trường học, ta lưu trữ thông tin về các khoa, sinh viên và tổ chức dữ liệu gồm:
    1> Thông tin về khoa như sau:
    Tên trường Ý nghĩa
    ID Mã khoa (dùng làm khóa chính)
    Ten Tên khoa
    Type Loại khoa (Khoa KHCB, Khoa KHKT)
    TenTK Tên trưởng khoa
    2> Thông tin về các sinh viên trong khoa gồm:
    Tên trường Ý nghiã
    ID Mã khoa (khoá ngoại liên kết)
    Lop Tên lớp học của sinh viên
    TenSV Họ tên sinh viên
    Yêu cầu:
    1> Tổ chức dữ liệu: Thông tin về các khoa và các sinh viên được lưu thành 2 tệp tin.
    2> Xây dựng thực đơn chương trình gồm các mục: Thêm khoa mới, Tìm thông tin về khoa, thống kê khoa theo chủng loại, Thoát chương trình
    3> Xây dựng các tính năng tương ứng với các mục trong thực đơn
    Chú ý:
    - Khi chạy chương trình sẽ hiển thị menu chọn (mỗi mục chọn được qui định bởi một phím chữ, ví dụ: thoát chương trình là phím q,….), khi người sử dụng chọn mục nào sẽ thực hiện tính năng tương ứng.
    - Chương trình cho phép người sử dụng cập nhật thêm các thông tin về khoa mới, cập nhật danh sách sinh viên của khoa, sửa đổi thông tin về khoa và các sinh viên trong khoa, hiển thị danh mục các khoa, danh sách sinh viên trong từng khoa, tìm kiếm thông tin về khoa và thông tin về các sinh viên trong khoa.

    Trả lờiXóa