This tutorial intends for you to run the code blocks directly in the command line.
- Create:
declare -a pub_list=(twitter tumblr disqus fsq wp-com wp-org)
- Assign:
list_items=$(echo ${pub_list[@]})
my_item=${pub_list[5]}
- Reference:
echo ${pub_list[@]}
echo ${pub_list[5]}
- Loop:
for pub in "${pub_list[@]}"; do
echo "---------------------------------"
echo "$pub"
done
- Create:
declare -A twitter_handle
- Assign:
twitter_handle["jrmontague"]=jrmontag twitter_handle["jkobl"]=JeffAKolb twitter_handle["shendrickson"]=DrSkippay twitter_handle["blehman"]=BrianLehman
- Reference:
echo ${twitter_handle["jrmontague"]}
echo ${!twitter_handle[@]}
echo ${twitter_handle[@]}
- Loop:
for i in "${!twitter_handle[@]}"; do
echo "key: $i"
echo "value: ${twitter_handle[$i]}"
done
- Create range:
start_date="2014-01-09 22:00:00"; end_date="2014-01-10 22:00:00";
- Create date objects:
current=$(date -d "${start_date:0:4}${start_date:5:2}${start_date:8:2} ${start_date:11:2}")
end=$(date -d "${end_date:0:4}${end_date:5:2}${end_date:8:2} ${end_date:11:2}")
- Loop:
while [ "$end" != "$current" ];do
path=$(date -d "$current" +%Y%m%d.%H)
year="${path:0:4}"
mnth="${path:4:2}"
day="${path:6:2}"
hour="${path:9:2}"
echo $path
current=$(date -d "$current +1 hours")
done
- Hard vs soft quote
var='$USER' echo $var
var="$USER" echo $var
- Combine quotes
var='$USER='"$USER"
- Create globals
grep_cmd1='grep -i -E "cat|bull dog"' # cat
grep_cmd2='grep -i -E "cat'"'"'s|bull dog"' # cat's
cmd1="cat prac | ${grep_cmd1}"
cmd2="cat prac | ${grep_cmd2}"
- Eval
eval $cmd1 eval $cmd2
- Back tic
echo `eval $cmd1` # be careful with back tics
- Back tic vs eval
pwd eval pwd echo `pwd` `pwd` #notice error echo $USER eval "$USER" #notice error echo `$USER` #notice error `$USER` #notice error $USER #notice error var=`echo $USER` echo $var var=$USER echo $var
- Quiz #1 Given a set of tweets and grep statemnts, create files appropriately named based on the grep rules. Only change the indicated line.
tmp=twitter.agg.piped
if [ -f grep_rules.txt ]; then
while read line; do
echo "file: $tmp for rule: $line"
eval "$line"
# --------------------
# -- run script and debug line below --
rname="${grep_stmt} | rules_to_file_name.py"
# -- run script and debug line above --
# --------------------
cmd="cat $tmp | $grep_stmt > twitter.agg.piped.${rname}.filter.piped &"
eval "$cmd"
done < grep_rules.txt
else
echo " No grep_rules.txt found."
fi
- Quiz #2 Try to spot the problem with the quotes.
# The following string resulted in a rule with value: "from:$USER" ; instead of value: "from:compston"
curl -v -X POST -ustephen@gnip.com "https://api.gnip.com/replay/rules.json" -d '{"rules":[{"value":"from:$USER"}]}'
- Quiz #1 solution
rname=$(echo "${grep_stmt}" |./rules_to_file_name.py)
- Quiz #2 solution
curl -v -X POST -ustephen@gnip.com "https://api.gnip.comreplay/rules.json" -d '{"rules":[{"value":"from:'"$USER"'"}]}'