mbohun
2/13/2015 - 4:58 AM

lines to delete with sed or awk

lines to delete with sed or awk

#prepare list of lines to delete for sed (linux and osx)
DDD=$(grep -n true test.out | sed -e 's/\:.*$//' | sed 'H;1h;$!d;x;y/\n/|/' | sed -e 's/|/d;/g')
echo $DDD
1d;2d;3d;4d;5d;6d;7d;8d;9d;10d;11d;12d;13d;14d;15d;16d;17d;18d;19d;21d;22d;23d;25d;26d;27d;30d;31d;32d;34d;39d;40d;41d;44d;45d;46d;47d;48d;49d;54d;55d;56d;57d;58d;59d;61

#prepare list of lines to delete for awk (linux or osx)
DDD=$(grep -n true test.out | sed -e 's/\:.*$//' | sed 'H;1h;$!d;x;y/\n/|/')
bash-3.2$ echo $DDD
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|21|22|23|25|26|27|30|31|32|34|39|40|41|44|45|46|47|48|49|54|55|56|57|58|59|61
#!/bin/bash                                                                                                                                                                                                                                        

if [ ${#@} -lt 2 ]; then
    echo "usage: ./githubapi-get-all-repos.sh [github username] [your github token] --no-forks"
    exit 1;
fi

GITHUB_USER_ORG=$1
GITHUB_TOKEN=$2
NO_FORKS=`if [ "$3" = "--no-forks" ]; then echo "1"; fi`

temp=`basename $0`
TMPFILE=`mktemp /tmp/${temp}.XXXXXX` || exit 1
TMPFILE_REPOS=`mktemp /tmp/${temp}.XXXXXX` || exit 1
TMPFILE_FORKS=`mktemp /tmp/${temp}.XXXXXX` || exit 1

# TODO: option --no-forks, or even better use popt                                                                                                                                                                                                 

function rest_call {
    curl -s -i $1 -H "Authorization: token $GITHUB_TOKEN" > $TMPFILE
    cat $TMPFILE | grep '"name":' >> $TMPFILE_REPOS;
    cat $TMPFILE | grep '"fork":' >> $TMPFILE_FORKS;
}

# single page result-s (no pagination), have no Link: section, the grep result is empty                                                                                                                                                            
last_page=`curl -s -I "https://api.github.com/users/$GITHUB_USER_ORG/repos" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:'`

# does this result use pagination?                                                                                                                                                                                                                 
if [ -z "$last_page" ]; then
    # no - this result has only one page                                                                                                                                                                                                           
    rest_call "https://api.github.com/users/$GITHUB_USER_ORG/repos"
else
    # yes - this result is on multiple pages; extract the last_page number                                                                                                                                                                         
    last_page=`echo $last_page | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`

    for p in `seq 1 $last_page`; do
        rest_call "https://api.github.com/users/$GITHUB_USER_ORG/repos?page=$p"
    done
fi

cat $TMPFILE_REPOS | sed -e 's/^ *"name": "//g' -e 's/",$//g' > $TMPFILE

if [ "$NO_FORKS" = "1" ]; then
    all_repos=(`cat $TMPFILE`)
    for index in `grep -n "false" $TMPFILE_FORKS | sed -e 's/:.*$//g'`; do
        echo "${all_repos[$index - 1]}"
    done
else
    cat $TMPFILE
fi