Tag: ubuntu Tag: linux Tag: シェル

シェル学習時のメモ

フォルダの存在をチェック

  • s20181119.sh
    #!/bin/bash
     
    YYYYMM=`date +%Y%m`
     
    # testdirが存在するかチェック
    if [ -e $YYYYMM ]; then
    :
    else
        echo "$YYYYMM NOT found."
        echo "create $YYYYMM ..."
        mkdir $YYYYMM
    fi




ImageMagickで複数のファイルのサイズを一括変換

スクリプトと同じフォルダ内の「*.JPG」画像をフォルダ「1920」を作って、その中に1920x1080にして同じ名前で保存する。元のファイルはそのまま手を付けず。

  • henkan1920.sh
    #!/bin/bash
     
    mkdir 1920
    for FILE in `ls -1 P*.JPG`; do convert -resize 1920x1080 $FILE 1920/$FILE; done




日付(年4桁、月2桁、日2桁)をちょっと加工

  • hogetest.sh
    #!/bin/bash
     
    echo $1
     
    echo "-------------------------"
     
    hoge=`echo "$1" | sed -e 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)$/\1-\2/g'`
     
    echo $hoge
     
     
    echo "$1" | sed -e 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)$/\1\/\2\/\3/g'
    echo "$1" | sed -e 's/\([0-9]\{4\}\)[^0-9]\([0-9]\{2\}\)[^0-9]\([0-9]\{2\}\)$/\1\/\2\/\3/g'
    echo "$1" | sed -e 's/\([0-9]\{4\}\)[^0-9]\([0-9]\{2\}\)[^0-9]\([0-9]\{2\}\)$/\1_\2_\3/g'

テストの方法

$ ./hogetest.sh  2018-10-11
2018-10-11
-------------------------
2018-10
2018/10/11
2018/10/11
2018_10_11




CSVの行と列を入れ替える

  • 引用元を忘れた。
cat CSVファイル | ./gyou-retu.sh
  • gyou-retu.sh
#! /usr/bin/gawk -f
# transposed_matrix.awk
 
BEGIN {
  FS=","
  OFS=","
}
{
    for (i = 1; i <= NF; i++) {
        val[i, NR] = $i;
    }
}
 
END {
    for (i = 1; i <= NF; i++) {
        for (j = 1; j <= NR; j++) {
            printf("%s%s", val[i, j], OFS);
        }
        print "";
    }
}




バックアップファイルの8日以上前のものを削除

  • デスクトップのメモなどのバックアップを取っているが、その古いものを削除する。
  • 2020-01-03 動いていたもののメモ。
  • 利用していた時のスクリプトのパス: ~/bin/del_old_desktop_backup.sh
    #!/bin/bash
     
    find /home/isao/work -type f -mtime +7 -name tar_i3-2125\*.tar.gz -exec rm {} \;




同形式のCSVファイルを1本にまとめる

  • 先頭2行が項目。項目は最初だけ。
  • ファイルは、1977.csv, 1978.csv...の数個。
  • まとめたファイル名は、all.csv
  • matome.sh
    #!/bina/bash
    files="1977 1978 1979 1980 1981 1982 1983 1984"
     
    head -n 2 1977.csv > all.csv
     
    for f in $files
    do
        tail -n +3 $f.csv >> all.csv
    done




フォルダ内の更新n日以内のファイル一覧

  • selectでファイルの選択してみる。
  • hoge_mktime.sh
    #!/bin/bash
     
     
    find ~/work/ -mtime -2 | tee in1day.txt
    select SFILE in `cat in1day.txt`
    do
    ls -l $SFILE
    done




ログの集計等

apacheのエラーログで"File does not exist"をIPアドレス毎にカウント

#!/bin/bash

# ログより "File does not exist"をIPアドレス毎にカウント

LOGFILE=ssl_error_log

IPLIST=$(grep "File does not exist" $LOGFILE | cut -d" " -f8 |cut -d] -f1 | sort | uniq)
for IP in $IPLIST; do
    echo $IP:$(grep -c $IP $LOGFILE)
done




URL

HJSplit

簡単!ファイル分割+ファイル結合(統合)ツール、大容量ファイルの送信に。
https://hjsplit.softonic.jp/