Tuesday, September 06, 2011

bash: randomize order of arguments

n=$#
c=0
declare -a s
for r in $(seq 1 $n)
do
while [ -z $i ] || [ $((${s[$i]})) -eq 1 ] && [ $c -lt $n ]
do
u=$(od -N2 -tu2 -An /dev/urandom)
i=$(( $u % $n + 1))
done
s[$i]=1
c=$(($c + 1))
echo $i
i=''
done

Tuesday, July 05, 2011

BASH: Random text file sample (linewise)

num=$(wc -l < file.txt)
for i in $(seq 1 1000)
do
   n=$(( $RANDOM * $RANDOM % $num ))
   sed -n "${n}p" file.txt >> /tmp/file.txt.sample
done

Tuesday, February 01, 2011

Teradata: timestamp literal

select cast('04/10/2009 02:56:12.937' AS TIMESTAMP(3) FORMAT 'DD/MM/YYYYBHH:MI:SSDS(3)')

Tuesday, October 26, 2010

perl: Lookahead REs

Convert:
...
1|30|1|201002|745.11267931439|84.34214120933
1|30|1|201003|864.95194019049|322.6665129525
1|30|1|201006|831.27144204046|56.168021427546
...

into (truncate fractionals after 3 digits):

1|30|1|201002|745.112|84.342
1|30|1|201003|864.951|322.666
1|30|1|201006|831.271|56.168

use:

cat myfile | perl -pe 's/(?<=\.[0-9]{3})[0-9]*//g;'

note:

-p implies

while (<>) {
...
} continue {
print or die "-p destination: $!\n";
}