====== Scripting Stuff ====== My personal 'collection' of short scripts (mostly Linux/Unix shell) that I may need to refer in the future... ===== Fix Missing Leading Zero ===== Issue when creating CSV from spreadsheet program (e.g. Libreoffice Calc). The number string in column 3 of each line needs to be exactly 12 and the first line is a header line. file=file.txt ; \ ( head -n 1 $file ; \ tail -n +2 $file | \ while read line ; do \ line=${line// ,/,} ; \ test=$(echo $line|cut -d',' -f3) ; \ temp=$test ; \ while [ ${#test} -lt 12 ] ; do \ test="0$test" ; \ done ; \ line=${line//$temp/$test} ; \ echo "$line" ; \ done ) A script: #!/bin/bash # check_nrid.sh # - filters invalid nric in student list csv file for unidata # - assume input is list.csv # - run 'bash check_nric.sh list.csv >/dev/null' to check # - if nothing comes out, then the file is good # - run 'bash check_nrid.sh list.csv > list1.csv 2>/dev/null' # - will get fixed data in list1.csv check_nrid() { local file loop line stid name nrid prog look prev file=$1 [ ! -f $file ] && exit 0 loop=0 while read line ; do if [ $loop -gt 0 ] ; then stid=$(echo $line|cut -d',' -f1) name=$(echo $line|cut -d',' -f2) nrid=$(echo $line|cut -d',' -f3) prog=$(echo $line|cut -d',' -f4) look=0 prev=$nrid while [ ${#nrid} -ne 12 ] ; do nrid="0$nrid" look=1 done # trim prog prog=${prog% } line="$stid,$name,$nrid,$prog,,," if [ $look -ne 0 ] ; then echo "** [$prev] $line" >&2 else echo "$line" fi fi ((loop++)) done < $file } check_nrid $@ ===== Read line-by-line ===== while IFS="" read -r line || [ -n "$line" ] ; do echo "> $line" done <<< $(cat $file) ===== Ensure integer value ===== #!/bin/bash get_integer() { # use: get_integer local idef test temp idef=$1 test=$2 if [ ! -z $test ] ; then temp=$(echo "$test" | grep -E -v "^[0-9]*$") [ -z "$temp" ] && idef=$test fi echo -n "$idef" } [ "$(basename $0 sh)" = "get_integer" ] && get_integer $@ ===== Some bash 1-liners ===== Find broken symbolic links in current path: find $(pwd) -type l -exec test ! -e {} \; -print