(command.CommandList children: [ (C {(Id.KW_Set set)} {(-o)} {(nounset)}) (C {(Id.KW_Set set)} {(-o)} {(pipefail)}) (C {(Id.KW_Set set)} {(-o)} {(errexit)}) (C {(readonly)} {(Id.Lit_VarLike 'FILES=') (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:77) words: [ {(../) (Id.Lit_Star '*') (.sh)} {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.sh)} {(../) (Id.Lit_Star '*') (.py)} {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.py)} {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.py)} ] ) } ) (command.ShFunction name: test-awk body: (command.BraceGroup children: [ (command.ForEach iter_name: awk iter_words: [ {(gawk)} {(mawk)} {(word_part.TildeSub token:(Token id:Id.Lit_TildeLike val:'~' span_id:131)) (/git/bwk/bwk) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {(---)}) (C {(echo)} {($ Id.VSub_DollarName '$awk')}) (C {(echo)} {(---)}) (command.TimeBlock pipeline: (command.ForEach iter_name: i iter_words: [ (word.BracedTree parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)] ) ] do_arg_iter: F body: (command.DoGroup children: [ (C {($ Id.VSub_DollarName '$awk')} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) (Token id: Id.Lit_Chars val: ' { \n' span_id: 173 ) (Token id:Id.Lit_Chars val:' line = tolower($0)\n' span_id:174) (Token id: Id.Lit_Chars val: ' num_lines += 1\n' span_id: 175 ) (Token id:Id.Lit_Chars val:'\n' span_id:176) (Token id: Id.Lit_Chars val: ' # NOTE: gawk has length(); mawk does not\n' span_id: 177 ) (Token id:Id.Lit_Chars val:' if (!(line in unique)) {\n' span_id:178) (Token id: Id.Lit_Chars val: ' num_unique += 1\n' span_id: 179 ) (Token id:Id.Lit_Chars val:' }\n' span_id:180) (Token id: Id.Lit_Chars val: ' unique[line] += 1\n' span_id: 181 ) (Token id:Id.Lit_Chars val:' }\n' span_id:182) (Token id: Id.Lit_Chars val: ' END {\n' span_id: 183 ) (Token id:Id.Lit_Chars val:' print "unique lines: " num_unique\n' span_id:184) (Token id: Id.Lit_Chars val: ' print "total lines: " num_lines\n' span_id: 185 ) (Token id:Id.Lit_Chars val:' }\n' span_id:186) (Token id:Id.Lit_Chars val:' ' span_id:187) ) } { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:FILES span_id:192) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ] ) ) ) ] ) ) ] ) ) (command.ShFunction name: test-python body: (command.BraceGroup children: [ (command.TimeBlock pipeline: (command.ForEach iter_name: i iter_words: [ (word.BracedTree parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)] ) ] do_arg_iter: F body: (command.DoGroup children: [ (C {(python)} {(-S)} {(-c)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id: Id.Lit_Chars val: 'import collections\n' span_id: 249 ) (Token id:Id.Lit_Chars val:'import sys\n' span_id:250) (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id: Id.Lit_Chars val: 'num_lines = 0\n' span_id: 252 ) (Token id:Id.Lit_Chars val:'num_unique = 0\n' span_id:253) (Token id: Id.Lit_Chars val: 'unique = collections.defaultdict(int)\n' span_id: 254 ) (Token id:Id.Lit_Chars val:'\n' span_id:255) (Token id: Id.Lit_Chars val: 'for path in sys.argv[1:]:\n' span_id: 256 ) (Token id:Id.Lit_Chars val:' with open(path) as f:\n' span_id:257) (Token id: Id.Lit_Chars val: ' for line in f:\n' span_id: 258 ) (Token id:Id.Lit_Chars val:' line = line.lower()\n' span_id:259) (Token id: Id.Lit_Chars val: ' num_lines += 1\n' span_id: 260 ) (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id: Id.Lit_Chars val: ' if line not in unique:\n' span_id: 262 ) (Token id:Id.Lit_Chars val:' num_unique += 1\n' span_id:263) (Token id: Id.Lit_Chars val: ' unique[line] += 1\n' span_id: 264 ) (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id: Id.Lit_Chars val: 'print "unique lines: ", num_unique\n' span_id: 266 ) (Token id:Id.Lit_Chars val:'print "total lines: ", num_lines\n' span_id:267) (Token id: Id.Lit_Chars val: ' ' span_id: 268 ) ) } { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:FILES span_id:273) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ] ) ) ) ] ) ) (command.ShFunction name: test-wc body: (command.BraceGroup children: [ (command.TimeBlock pipeline: (command.ForEach iter_name: i iter_words: [ (word.BracedTree parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)] ) ] do_arg_iter: F body: (command.DoGroup children: [ (command.Pipeline children: [ (C {(cat)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:FILES span_id:317) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (C {(wc)} {(-c)}) ] negated: F ) ] ) ) ) ] ) ) (command.ShFunction name: files body: (command.BraceGroup children: [ (C {(echo)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:FILES span_id:347) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (C {(echo)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:FILES span_id:360) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) (' files') ) } ) ] ) ) (C {(DQ ($ Id.VSub_At '$@'))}) ] )