CS 279 - Week 10 Lecture 1 - 2022-10-24
TODAY WE WILL
* announcements/reminders
* a couple more Linux commands:
sort and tee
* intro to Bash arrays
* if time: intro to BASH_REMATCH array (holds matches
to regular expression subexpressions)
* prep for next class
=====
another UNIX/Linux command: sort
=====
* yes, it does what you think
* a default alphameric sort, that you can modify based
on its options
* for example:
cat stuff.txt | sort
=====
tee
=====
* provides a way to capture the contents of a pipe
in a file without disrupting the flow of information
through that pipe
* tee desired_file
...causes standard input to be copied to
standard output AND to the file (or files!) specified
ls # see files on-screen
ls | tee looky.txt # see files on-screen AND put in looky.txt
...divert a copy of intermediate stuff? Yes:
ls | tee looky.txt | wc -l
* looky.txt gets the plain ls output,
wc -l also gets it and can count its lines
* this does work, also:
ls | tee looky.txt | wc -l > num_files.txt
* just two options?!
-a - append the output to each file instead of overwriting
the file
-i - ignore interrupts (!)
=====
intro to Bash arrays
=====
* source: a Linux Journal article:
"Bash Arrays" - Mitch Frazier - June 2008
* Bash arrays
* have numbered indexes only
* but! they are sparse, e.g. you don't have to define
all the indices (!!)
* An entire array can be assigned by enclosing the
array items in parentheses, separated by blanks/whitespace
arr=(Hello World) # that's a two element array
* individual items can be ASSIGNED using the familiar
common array syntax:
arr[0]=Bonjour
* BUT! you can simply add an element at an index
(and it doesn't have to be contiguous...!)
arr[8]=Linux
* to refer TO an array element,
you use: ${array_name[index]}
echo ${arr[8]} # ought to echo Linux
"the [curly] braces are required to avoid conflicts with
pathname expansion" <-- file globbing!
* here are additional possiblities here:
${arrayname[*]} # all of the items in the array
${!arrayname[*]} # all of the indexes in the array
${#arrayname[*]} # number of elements in the array
${#arrayname[desired_index]} # length of item with index desired_index
* you CAN initialize a sparse array,
using [desired_index]=desired_val IN the parentheses:
arr2=(moo a b [10]=oink [15]=moo)
* if you use @ instead of * and quote the expression,
for element in "${arr[@]}"
...WILL maintain elements with blanks, etc. as single elements