(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'SHQL_ROOT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SHQL_ROOT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SHQL_ROOT='> name:SHQL_ROOT) op: assign_op.Equal rhs: {(DQ <'/u/shql'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'EDITOR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EDITOR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EDITOR='> name:EDITOR) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name EDITOR> var_name: EDITOR suffix_op: (suffix_op.Unary op: <Id.VTest_ColonEquals _> arg_word: {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <bin> <Id.Lit_Slash '/'> <vi>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SHELL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SHELL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SHELL='> name:SHELL) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name SHELL> var_name: SHELL suffix_op: (suffix_op.Unary op: <Id.VTest_ColonEquals _> arg_word: {<Id.Lit_Slash '/'> <bin> <Id.Lit_Slash '/'> <sh>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'AWK='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AWK='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AWK='> name:AWK) op: assign_op.Equal rhs: {<mawk>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'DEBUG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DEBUG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DEBUG='> name:DEBUG) op: assign_op.Equal rhs: {(DQ <N>)} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName DEBUG))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-x>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'UMASK='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'UMASK='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'UMASK='> name:UMASK) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {<0000>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <trap> more_env: [] words: [ {<trap>} { (DQ <'echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <Goodbye> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' ; '> <' rm -f /tmp/'> ($ Id.VSub_Dollar '$') <' /tmp/'> ($ Id.VSub_Dollar '$') <'row /tmp/'> ($ Id.VSub_Dollar '$') <'join*'> ) } {<0>} {<1>} {<2>} {<3>} {<15>} ] redirects: [] do_fork: T ) (command.Simple blame_tok:<set> more_env:[] words:[{<set>} {<-h>}] redirects:[] do_fork:T) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'\\c'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-s>} {<c>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'NOCR1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NOCR1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NOCR1='> name:NOCR1) op: assign_op.Equal rhs: {(SQ <-n>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NOCR2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NOCR2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NOCR2='> name:NOCR2) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] spids: [152 170] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'NOCR1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NOCR1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NOCR1='> name:NOCR1) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NOCR2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NOCR2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NOCR2='> name:NOCR2) op: assign_op.Equal rhs: {(SQ <'\\c'>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NL='> name:NL) op: assign_op.Equal rhs: {(SQ <'\n'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TAB='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TAB='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TAB='> name:TAB) op: assign_op.Equal rhs: {(SQ <'\t'>)} ) ] redirects: [] ) (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<_IFS>} {<TABLE>} {<CMD>} {<NOCR1>} {<NOCR2>} {<NL>} {<TAB>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_IFS='> name:_IFS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName IFS))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <X-q>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'QUIET='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'QUIET='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'QUIET='> name:QUIET) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [239 257] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <X>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Missing database name.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'The database name must be a directory under '> ($ Id.VSub_DollarName HOME) <'/shql'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'\tor a directory under '> ($ Id.VSub_DollarName SHQL_ROOT))}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [270 287] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Database: '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName HOME) <'/shql/'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName HOME) <'/shql/'> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] spids: [336 348] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName SHQL_ROOT) <'/'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName SHQL_ROOT) <'/'> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] spids: [356 368] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName HOME) <'/'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName HOME) <'/'> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] spids: [376 388] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] spids: [396 406] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unknown database ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'The database name must be a directory under '> ($ Id.VSub_DollarName HOME) <'/shql'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'\tor a directory under '> ($ Id.VSub_DollarName SHQL_ROOT))}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShFunction name_tok: <syntax> name: syntax body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <create> pattern: (pat.Words words:[{<create>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'CREATE TABLE table_name (\n'> <'\tcolumn_name column_width \n'> <'\t{, ...} \n'> <') \t\n'> <'or\n'> <'CREATE VIEW view_name (\n'> <'\ttable_or_view1.column1 = table_or_view2.column2\n'> <')\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <delete> pattern: (pat.Words words:[{<delete>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'DELETE \n'> <'FROM table_name\t\n'> <'{ WHERE where_clause }\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <drop> pattern: (pat.Words words:[{<drop>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'DROP TABLE table_name\n'> <'or\n'> <'DROP VIEW view_name\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <edit> pattern: (pat.Words words:[{<edit>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'EDIT table_name\n'> < 'is a non-standard method of changing a table\'s field names or display widths.\n' > ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <help> pattern: (pat.Words words:[{<help>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'HELP ALL\n'> <'or\n'> <'HELP TABLES \n'> <'or\n'> <'HELP VIEWS\n'> <'or\n'> <'HELP COMMANDS\n'> <'or\n'> < 'HELP [CREATE | DELETE | DROP | INSERT | SELECT | UPDATE | WHERE | PRINT | EDIT]\n' > <'or\n'> <'HELP table_name\n'> <'Commands must appear in lower case.\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <insert> pattern: (pat.Words words:[{<insert>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'INSERT INTO table_name \n'> <'\t{ ( column_name, ... ) }\n'> <'VALUES ( expression, ...)\n'> <'or\t\t\n'> <'INSERT INTO table_name \n'> <'\t{ ( column_name, ... ) }\n'> <'subselect\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <print> pattern: (pat.Words words:[{<print>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'PRINT table_name \n'> <'is a non-standard synonym for SELECT * FROM table_name.\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <select> pattern: (pat.Words words:[{<select>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'SELECT { DISTINCT } \n'> <'\t[ column_name {,...} | * ]\n'> <'FROM [ table_name | view_name ]\n'> <'{ WHERE where_clause }\n'> <'{ ORDER BY column_name { NUM } { ASC | DESC } {, ... }\n'> <'{ UNION select statement }\n'> <'\'NUM\' is a non-standard method for sorting numeric fields.\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <update> pattern: (pat.Words words:[{<update>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'UPDATE table_name\n'> <'SET column_name = expression {, ... }\n'> <'{ WHERE where_clause }\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <where> pattern: (pat.Words words:[{<where>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ < 'WHERE [ column_name | value ] [ =, !=, >, <, >=, <=, and, or, not, in ]\n' > <' [ column_name | value | subselect ]\n'> <'Parentheses may be used to group expressions. \n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <syntax> pattern: (pat.Words words:[{<syntax>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<commands>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<delete>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<drop>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<insert>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<select>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<update>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<where>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<print>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<edit>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <lookup_field> name: lookup_field body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {($ Id.VSub_DollarName TABLE) <Id.Lit_Other '%'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'RESULT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'RESULT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-n>} {(DQ <'^'> ($ Id.VSub_Number 1) <'\t'>)} {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) ] spids: [833 847] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'RESULT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'RESULT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-n>} {(DQ <'^'> ($ Id.VSub_Number 1) <'\t'>)} {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<1q>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName RESULT))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OUTFIELD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OUTFIELD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OUTFIELD='> name:OUTFIELD) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [910 924] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OUTFIELDNUM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OUTFIELDNUM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OUTFIELDNUM='> name:OUTFIELDNUM) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName RESULT))} {<Id.Lit_Colon ':'>} {(SQ <'\\([^:]*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OUTFIELD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OUTFIELD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OUTFIELD='> name:OUTFIELD) op: assign_op.Equal rhs: { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') ($ Id.VSub_DollarName OUTFIELDNUM) ) } ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <do_aggreg> name: do_aggreg body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <Xsum>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'AGGREG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGREG='> name:AGGREG) op: assign_op.Equal rhs: {(SQ <total>)} ) ] redirects: [] ) ] spids: [999 1017] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <Xavg>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'AGGREG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGREG='> name:AGGREG) op: assign_op.Equal rhs: {(SQ <'(total/cnt)'>)} ) ] redirects: [] ) ] spids: [1025 1043] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <Xcount>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'AGGREG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGREG='> name:AGGREG) op: assign_op.Equal rhs: {(SQ <cnt>)} ) ] redirects: [] ) ] spids: [1051 1069] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <Xmin>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'AGGREG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGREG='> name:AGGREG) op: assign_op.Equal rhs: {(SQ <min>)} ) ] redirects: [] ) ] spids: [1077 1095] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <Xmax>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'AGGREG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGREG='> name:AGGREG) op: assign_op.Equal rhs: {(SQ <max>)} ) ] redirects: [] ) ] spids: [1103 1121] ) ] else_kw: <Id.KW_Else else> else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X('>)} {<-o>} {(DQ <X> ($ Id.VSub_Number 4))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X)'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad aggregate syntax'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<select>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'AGGFIELD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGFIELD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'AGGFIELD='> name:AGGFIELD) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 3))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<4>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_DollarName AGGFIELD))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad field name ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xorder>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xunion>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OUTFIELD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OUTFIELD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OUTFIELD='> name:OUTFIELD) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'SUBSELECT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SUBSELECT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SUBSELECT='> name: SUBSELECT ) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'AGGREGATE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'AGGREGATE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'AGGREGATE='> name: AGGREGATE ) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <select_> more_env: [] words: [ {<select_>} {(DQ <select>)} {(DQ ($ Id.VSub_DollarName AGGFIELD))} {(DQ <from>)} {(DQ ($ Id.VSub_DollarName TABLE))} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <Id.VSub_DollarName '$AWK'> more_env: [] words: [ {($ Id.VSub_DollarName AWK)} {<-F> (DQ <'\t'>)} { (SQ <'NR == 1 { min = $1; max = $1 }\n'> <'\t\t\t { cnt += 1; total += $1 }\n'> <'\t\t$1 < min { min = $1 }\n'> <'\t\t$1 > max { max = $1 }\n'> <'\t\tEND\t { printf "%s%s%s", "\\"", '> ) ($ Id.VSub_DollarName AGGREG) (SQ <', "\\"" }'>) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName RESULT))} {<Id.Lit_Colon ':'>} {(SQ <'[^\t]*\t\\(.*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } {<-lt>} {<10>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'RESULT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'RESULT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName AGGFIELD) <'\t10'>)} ) ] redirects: [] ) ] spids: [1420 1451] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <do_join> name: do_join body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 2))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Bad view specifcation ('> ($ Id.VSub_Number 1) <.> ($ Id.VSub_Number 2) <')'>) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'JFIELD1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'JFIELD1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'JFIELD1='> name:JFIELD1) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName OUTFIELDNUM))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'JFIELD1L1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'JFIELD1L1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'JFIELD1L1='> name:JFIELD1L1) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [{<expr>} {($ Id.VSub_DollarName JFIELD1)} {<->} {<1>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_Number 3))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 3))} ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 4))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Bad view specifcation ('> ($ Id.VSub_Number 3) <.> ($ Id.VSub_Number 4) <')'>) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'JFIELD2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'JFIELD2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'JFIELD2='> name:JFIELD2) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName OUTFIELDNUM))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'JFIELD2L1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'JFIELD2L1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'JFIELD2L1='> name:JFIELD2L1) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [{<expr>} {($ Id.VSub_DollarName JFIELD2)} {<->} {<1>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {(DQ <'^'> ($ Id.VSub_Number 2) <'\t'>)} {($ Id.VSub_Number 1) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-v>} {(DQ <'^'> ($ Id.VSub_Number 2) <'\t'>)} {($ Id.VSub_Number 1) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-v>} {(DQ <'^'> ($ Id.VSub_Number 4) <'\t'>)} {($ Id.VSub_Number 3) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_Number 5) <Id.Lit_At '@'>} ) ] ) (command.Simple blame_tok: <sort> more_env: [] words: [ {<sort>} {<-t> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\t'> ch:'\t')} {<Id.Lit_Other '+'> ($ Id.VSub_DollarName JFIELD2L1)} {($ Id.VSub_Number 3) <Id.Lit_TildeLike '~'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <sort> more_env: [] words: [ {<sort>} {<-t> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\t'> ch:'\t')} {<Id.Lit_Other '+'> ($ Id.VSub_DollarName JFIELD1L1)} {($ Id.VSub_Number 1) <Id.Lit_TildeLike '~'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <join> more_env: [] words: [ {<join>} {<-t> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\t'> ch:'\t')} {<-j1>} {($ Id.VSub_DollarName JFIELD1)} {<-j2>} {($ Id.VSub_DollarName JFIELD2)} {<->} {<'/tmp/'> ($ Id.VSub_Dollar '$')} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_Number 5) <Id.Lit_TildeLike '~'>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <update_view> name: update_view body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_Number 1) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _>] ) (command.Subshell left: <Id.Op_LParen _> child: (command.Simple blame_tok: <do_join> more_env: [] words: [ {<do_join>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_Number 1) <Id.Lit_Other '%'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) right: <Id.Right_Subshell _> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <where> name: where body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<-a>} {(DQ ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <order>)} {<-a>} {(DQ ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <union>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xselect>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<X>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'SUBSELECT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SUBSELECT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SUBSELECT='> name: SUBSELECT ) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <select_> more_env: [] words: [{<select_>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [1920 1935] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1875 1893] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <and> pattern: (pat.Words words:[{<and>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName WHERE) <' && '>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <or> pattern: (pat.Words words:[{<or>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName WHERE) <' || '>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <not> pattern: (pat.Words words:[{<not>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName WHERE) <' !'>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Equals '='> pattern: (pat.Words words:[{<Id.Lit_Equals '='>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName WHERE) <' == '>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_SingleQuote '\''> pattern: (pat.Words words:[{(SQ <in>)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<X>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'SUBSELECT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SUBSELECT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SUBSELECT='> name: SUBSELECT ) op: assign_op.Equal rhs: {(SQ <Y>)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <select_> more_env: [] words: [{<select_>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [2039 2054] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'INWHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'INWHERE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'INWHERE='> name: INWHERE ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMP='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMP='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMP='> name:COMP) op: assign_op.Equal rhs: {(DQ <'=='>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LOGIC='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LOGIC='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOGIC='> name:LOGIC) op: assign_op.Equal rhs: {(DQ <'||'>)} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName LAST))} {<Id.Lit_Equals '='>} {(DQ <Xnot>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'COMP='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMP='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMP='> name:COMP) op: assign_op.Equal rhs: {(DQ <'='>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LOGIC='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LOGIC='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'LOGIC='> name: LOGIC ) op: assign_op.Equal rhs: {(DQ <'&&'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [VALUE] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName INWHERE))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <X>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'INWHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'INWHERE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'INWHERE='> name: INWHERE ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName INWHERE) <' '> ($ Id.VSub_DollarName LOGIC) ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'INWHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'INWHERE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'INWHERE='> name: INWHERE ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName INWHERE) <' ('> ($ Id.VSub_DollarName WHERE) ($ Id.VSub_DollarName COMP) <' '> ($ Id.VSub_DollarName VALUE) <') '> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName INWHERE))} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName WHERE) <' '> ($ Id.VSub_DollarName OUTFIELD) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LAST='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LAST='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LAST='> name:LAST) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName WHERE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ <' ( '> ($ Id.VSub_DollarName WHERE) <' ) '>)} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Missing \'where\' clause'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<where>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <help> name: help body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Ambiguous syntax, try:'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<help>}] redirects: [] do_fork: T ) ] spids: [2276 2289] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <all>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <ls> more_env: [] words: [ {<ls>} {<Id.Lit_Star '*'> <Id.Lit_At '@'>} {<Id.Lit_Star '*'> <Id.Lit_Other '%'>} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d> <Id.Lit_At '@'>} {<-f1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d> <Id.Lit_Other '%'>} {<-f1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <uniq> more_env: [] words: [{<uniq>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) ] spids: [2307 2324] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <tables>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <ls> more_env: [] words: [ {<ls>} {<Id.Lit_Star '*'> <Id.Lit_At '@'>} {<Id.Lit_Star '*'> <Id.Lit_Other '%'>} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d> <Id.Lit_At '@'>} {<-f1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d> <Id.Lit_Other '%'>} {<-f1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <uniq> more_env: [] words: [{<uniq>} {<-u>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) ] spids: [2360 2378] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <views>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<Id.Lit_Star '*'> <Id.Lit_Other '%'>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-d> <Id.Lit_Other '%'>} {<-f1>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] spids: [2417 2435] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <commands>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ <END>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'/p is print\n'> <'/g is go(execute)\n'> <'/q is quit\n'> <'/e is edit\n'> <'/i is include\n'> <'/w is write\n'> <'/r is reset(clear)\n'> <'/s is shell\n'> <'/p/g print and go\n'> < 'The number sign(#) may be used at the start of a line for comments.\n' > ] ) ) ] do_fork: T ) ] spids: [2456 2473] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_DollarName TABLE))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_Number 2) <'@'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName NL) <' <'> ($ Id.VSub_Number 2) <'>'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(DQ ($ Id.VSub_Number 2) <'@'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ (${ Id.VSub_Number 2) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} { (DQ ($ Id.VSub_DollarName NL) <' View:\t'> ($ Id.VSub_DollarName NOCR2) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<X>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_Number 2) <Id.Lit_Other '%'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ ($ Id.VSub_Number 1) <.> ($ Id.VSub_Number 2) <' = '> ($ Id.VSub_Number 3) <.> ($ Id.VSub_Number 4) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName NL) <' Rows:\t'>) (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) ] spids: [2519 2534] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName TABLE) <' does not exist.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<help>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <create> name: create body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_Number 2) <'@'>)} {<-o>} {<-f>} {(DQ ($ Id.VSub_Number 2) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Table already exists.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [2685 2708] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xview>)} {<-a>} {($ Id.VSub_Pound '#')} {<-gt>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<6>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) ] spids: [2751 2764] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X('>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad syntax'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE1='> name:TABLE1) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_Number 3)} {<Id.Lit_Colon ':'>} {(SQ <'\\([^\\.]*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FIELD1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FIELD1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FIELD1='> name:FIELD1) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_Number 3)} {<Id.Lit_Colon ':'>} {(SQ <'[^\\.]*.\\(.*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TABLE1))} ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_DollarName FIELD1))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad table or field name'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 4))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X='>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad syntax'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE2='> name:TABLE2) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_Number 5)} {<Id.Lit_Colon ':'>} {(SQ <'\\([^\\.]*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FIELD2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FIELD2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FIELD2='> name:FIELD2) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_Number 5)} {<Id.Lit_Colon ':'>} {(SQ <'[^\\.]*.\\(.*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TABLE2))} ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_DollarName FIELD2))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad table or field name'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X('>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad syntax'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ ($ Id.VSub_DollarName TABLE1) <' '> ($ Id.VSub_DollarName FIELD1) <' '> ($ Id.VSub_DollarName TABLE2) <' '> ($ Id.VSub_DollarName FIELD2) <' '> ($ Id.VSub_Number 1) ) } ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_Number 1) <Id.Lit_Other '%'>} ) ] do_fork: T ) (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <OK>)}] redirects: [] do_fork: T ) ] spids: [2720 2746] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xtable>)} {<-a>} {($ Id.VSub_Pound '#')} {<-ge>} {<5>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 3))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X('>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad syntax'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<3>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Redir_Great '>'> more_env: [] words: [] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>} ) ] do_fork: F ) (command.Simple blame_tok: <Id.Redir_Great '>'> more_env: [] words: [] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: F ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ge>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_Number 1) <'\t'> ($ Id.VSub_Number 2))}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>} ) ] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<2>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X)'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad syntax'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {($ Id.VSub_DollarName TABLE) <Id.Lit_LBracket '['> <Id.Lit_At '@'> <Id.Lit_TildeLike '~'> <Id.Lit_RBracket ']'> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <OK>)}] redirects: [] do_fork: T ) ] spids: [3115 3142] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Improper syntax ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<create>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <drop> name: drop body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <table>)} {<-a>} {(DQ ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <view>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Syntax error.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<drop>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <table>)} {<-a>} {<-f>} {(DQ ($ Id.VSub_Number 3) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Can not drop, '> ($ Id.VSub_Number 2) <' is a view, not a table'>)} ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <view>)} {<-a>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_Number 3) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Can not drop, '> ($ Id.VSub_Number 2) <' is not a view'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_Number 3) <'@'>)} {<-o>} {<-f>} {(DQ ($ Id.VSub_Number 3) <'%'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {($ Id.VSub_Number 3) <Id.Lit_At '@'>} {($ Id.VSub_Number 3) <Id.Lit_TildeLike '~'>} {($ Id.VSub_Number 3) <Id.Lit_Other '%'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <OK>)}] redirects: [] do_fork: T ) ] spids: [3490 3514] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'No such table'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <insert> name: insert body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xinto>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Improper syntax ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<insert>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_DollarName TABLE))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Can not insert into a view'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName TABLE) <'@'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Table does not exist'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'ATTRIB='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ATTRIB='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ATTRIB='> name:ATTRIB) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'XASGN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XASGN='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'XASGN='> name:XASGN) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'XECHO='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XECHO='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'XECHO='> name:XECHO) op: assign_op.Equal rhs: { (DQ <'echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<-a>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <'X('>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'ATTRIB2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ATTRIB2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ATTRIB2='> name:ATTRIB2) op: assign_op.Equal rhs: {(DQ <0>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<-a>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X)'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Bad field name. ('> ($ Id.VSub_Number 1) <')'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'XASGN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XASGN='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'XASGN='> name:XASGN) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName XASGN) <' X'> ($ Id.VSub_DollarName OUTFIELDNUM) <'='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'> ch:'`') <'eval echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <1> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'> ch:'`') <' ; shift;'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'ATTRIB2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ATTRIB2='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'ATTRIB2='> name: ATTRIB2 ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_DollarName ATTRIB2)} {<Id.Lit_Other '+'>} {<1>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X)'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Syntax error ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<insert>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'POS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POS='> name:POS) op: assign_op.Equal rhs: {(DQ <1>)} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName POS))} {<-le>} {(DQ ($ Id.VSub_DollarName ATTRIB))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<X> ($ Id.VSub_DollarName POS) <Id.Lit_Equals '='> (DQ )}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName POS))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <1>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'XECHO='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XECHO='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'XECHO='> name: XECHO ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName XECHO) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <TAB> ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'XECHO='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XECHO='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'XECHO='> name:XECHO) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName XECHO) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <X> ($ Id.VSub_DollarName POS) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POS='> name:POS) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_DollarName POS)} {<Id.Lit_Other '+'>} {<1>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'XECHO='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'XECHO='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'XECHO='> name:XECHO) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName XECHO) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ATTRIB='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ATTRIB='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ATTRIB='> name:ATTRIB) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ATTRIB2))} ) ] redirects: [] ) ] spids: [3711 3737] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xselect>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {<set>} {<X>} { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'SUBSELECT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SUBSELECT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SUBSELECT='> name: SUBSELECT ) op: assign_op.Equal rhs: {(SQ <Y>)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <select_> more_env: [] words: [{<select_>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) right: <Id.Backtick_Right '`'> ) <' '> <Id.Lit_BadBackslash '\\'> <')'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [4002 4020] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xvalues>)} {<-o>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <'X('>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Improper syntax ('> ($ Id.VSub_Number 1) <')'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<insert>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] spids: [4058 4092] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<2>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [LAST] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName LAST))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'X)'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Improper syntax'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<insert>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\('> ch: '(' ) } {($ Id.VSub_Pound '#')} {<->} {<1>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\)'> ch: ')' ) } {<Id.Lit_Other '%'>} {($ Id.VSub_DollarName ATTRIB)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Incorrect number of values.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [4183 4220] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'ROWS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ROWS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ROWS='> name:ROWS) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\('> ch: '(' ) } {($ Id.VSub_Pound '#')} {<->} {<1>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\)'> ch: ')' ) } {<'/'>} {($ Id.VSub_DollarName ATTRIB)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName XASGN))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<echo>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ($ Id.VSub_DollarName NOCR2) ) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\('> ch: '(' ) } {($ Id.VSub_Pound '#')} {<->} {<1>} { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\)'> ch: ')' ) } {<Id.Lit_Other '%'>} {($ Id.VSub_DollarName ATTRIB)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} { (DQ ($ Id.VSub_DollarName TAB) (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<echo>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ($ Id.VSub_DollarName NOCR2) ) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ )}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: T ) ] spids: [4279 4295] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {($ Id.VSub_DollarName XASGN)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {($ Id.VSub_DollarName XECHO)}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'('> ($ Id.VSub_DollarName ROWS) <' rows)'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <delete> name: delete body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_DollarName TABLE))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'You can not delete from a view.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName TABLE) <'@'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName TABLE) <' does not exit.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 3))} {<Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<2>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <where> more_env: [] words: [{<where>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$AWK'> more_env: [] words: [ {($ Id.VSub_DollarName AWK)} {<-F> (DQ <'\t'>)} { (DQ <'! '> ($ Id.VSub_DollarName WHERE) <' { cnt += 1 ; print } \n'> <'\t\t\tEND { printf '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'( %1d rows.)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <n> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <', (NR - cnt) '> <'\t\t\t>'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'/tmp/'> ($ Id.VSub_Dollar '$') <row> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <' }'> ) } {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<'/tmp/'> ($ Id.VSub_Dollar '$')} {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <row>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] spids: [4532 4550] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(SQ <'('>) (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) (SQ <' rows)'>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Redir_Great '>'> more_env: [] words: [] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ) ] do_fork: F ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <update> name: update body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_DollarName TABLE))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Can not update a view.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName TABLE) <'@'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName TABLE) <' does not exit.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 3))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xset>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Improper syntax.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<update>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<3>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'ASSIGN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ASSIGN='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ASSIGN='> name:ASSIGN) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<-a>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <'X='>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'ASSIGN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ASSIGN='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ASSIGN='> name:ASSIGN) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ASSIGN) <' ; '>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'ASSIGN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ASSIGN='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ASSIGN='> name:ASSIGN) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ASSIGN) <' '> ($ Id.VSub_DollarName OUTFIELD))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <where> more_env: [] words: [{<where>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [4869 4888] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$AWK'> more_env: [] words: [ {($ Id.VSub_DollarName AWK)} {<-F> (DQ <'\t'>)} { (DQ <'BEGIN { OFS = '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' }\n'> <'\t\t'> ($ Id.VSub_DollarName WHERE) <' \t{ '> ($ Id.VSub_DollarName ASSIGN) <'; cnt += 1 }\n'> <'\t\t\t{ print } \n'> <'\t\tEND \t{ printf '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'( %1d rows)'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <n> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <', cnt >'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/tmp/'> ($ Id.VSub_Dollar '$') <row> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' }'> ) } {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<'/tmp/'> ($ Id.VSub_Dollar '$')} {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <row>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <select_> name: select_ body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName DEBUG))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-x>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'UNION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'UNION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'UNION='> name:UNION) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName UNION))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'INAGG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'INAGG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'INAGG='> name:INAGG) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FROM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FROM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FROM='> name:FROM) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'UNION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'UNION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'UNION='> name:UNION) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLE='> name:TABLE) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [ATABLE] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName ATABLE))} {<Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName ATABLE))} {<Id.Lit_Equals '='>} {(DQ <Xorder>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName ATABLE))} {<Id.Lit_Equals '='>} {(DQ <Xunion>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_DollarName ATABLE))} {<Id.Lit_Equals '='>} {(DQ <Xfrom>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'FROM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FROM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FROM='> name:FROM) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName FROM))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName ATABLE) <'@'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName ATABLE) <' does not exist.'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName TABLE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ATABLE))} ) ] redirects: [] ) ] spids: [5202 5215] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'JTABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'JTABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'JTABLE='> name: JTABLE ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TABLE))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PREV='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PREV='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PREV='> name: PREV ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PPREV='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PPREV='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PPREV='> name: PPREV ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FOUND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FOUND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FOUND='> name: FOUND ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [GETJ] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName PREV))} {<Id.Lit_Equals '='>} {(DQ <'='>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName JTABLE))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [ {<lookup_field>} {(DQ ($ Id.VSub_DollarName PPREV))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName ATABLE) ) } ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [ {<lookup_field>} {(DQ ($ Id.VSub_DollarName GETJ))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'FOUND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FOUND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FOUND='> name: FOUND ) op: assign_op.Equal rhs: {(DQ <Y1>)} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [ <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> ] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ATABLE))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [ {<lookup_field>} {(DQ ($ Id.VSub_DollarName PPREV))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName JTABLE) ) } ) ] redirects: [] ) (command.Simple blame_tok: <lookup_field> more_env: [] words: [ {<lookup_field>} {(DQ ($ Id.VSub_DollarName GETJ))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'FOUND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FOUND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FOUND='> name: FOUND ) op: assign_op.Equal rhs: {(DQ <Y2>)} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [ <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> ] ) ] spids: [5254 5271] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PPREV='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PPREV='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PPREV='> name: PPREV ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName PREV))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PREV='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PREV='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PREV='> name: PREV ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName GETJ))} ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName FOUND))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Join not found, '> <Id.Lit_BadBackslash '\\'> <c> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'try reordering tables.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName FOUND))} {<Id.Lit_Equals '='>} {(DQ <Y1>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ ($ Id.VSub_DollarName JTABLE) <'\t'> ($ Id.VSub_DollarName PPREV) <'\t'> ($ Id.VSub_DollarName ATABLE) <'\t'> ($ Id.VSub_DollarName GETJ) <'\t/tmp/'> ($ Id.VSub_Dollar '$') <join2> ) } ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$') <join2> <Id.Lit_Other '%'> } ) ] do_fork: T ) ] spids: [5418 5435] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ ($ Id.VSub_DollarName ATABLE) <'\t'> ($ Id.VSub_DollarName PPREV) <'\t'> ($ Id.VSub_DollarName JTABLE) <'\t'> ($ Id.VSub_DollarName GETJ) <'\t/tmp/'> ($ Id.VSub_Dollar '$') <join2> ) } ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$') <join2> <Id.Lit_Other '%'> } ) ] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <update_view> more_env: [] words: [ {<update_view>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join2> <Id.Lit_TildeLike '~'> } {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_TildeLike '~'> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join2> <Id.Lit_At '@'>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName RESULT))} {<Id.Lit_Colon ':'>} {(SQ <'[^:]:*\\(.*\\)'>)} ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_At '@'> } ) ] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <cut> more_env: [] words: [ {<cut>} {<-d> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\t'> ch: '\t' ) } {<-f1>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_TildeLike '~'> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <paste> more_env: [] words: [ {<paste>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_TildeLike '~'> } {<->} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {<'/tmp/'> ($ Id.VSub_Dollar '$')} {<'/tmp/'> ($ Id.VSub_Dollar '$') <join> <Id.Lit_TildeLike '~'> } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLE='> name: TABLE ) op: assign_op.Equal rhs: {(DQ <'/tmp/'> ($ Id.VSub_Dollar '$') <join>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5154 5165] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName FROM))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Syntax error.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<select>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <update_view> more_env: [] words: [{<update_view>} {(DQ ($ Id.VSub_DollarName TABLE))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'DISTINCT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DISTINCT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DISTINCT='> name:DISTINCT) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xdistinct>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'DISTINCT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DISTINCT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DISTINCT='> name:DISTINCT) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'FIELDS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FIELDS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FIELDS='> name:FIELDS) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PRINTF='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PRINTF='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PRINTF='> name:PRINTF) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xfrom>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(SQ <'X*'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<X>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [ {<cut>} {<-d> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\t'> ch: '\t' ) } {<-f1>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [5707 5725] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [{<lookup_field>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <do_aggreg> more_env: [] words: [{<do_aggreg>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'INAGG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'INAGG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'INAGG='> name: INAGG ) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<3>}] redirects: [] do_fork: T ) ] spids: [5796 5811] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Bad field name ('> ($ Id.VSub_Number 1) <')'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5772 5787] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName FIELDS))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'FIELDS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FIELDS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FIELDS='> name: FIELDS ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName FIELDS) <','>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'FIELDS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FIELDS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FIELDS='> name: FIELDS ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName FIELDS) <' '> ($ Id.VSub_DollarName OUTFIELD) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SUBSELECT))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName PRINTF))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'PRINTF='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PRINTF='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PRINTF='> name: PRINTF ) op: assign_op.Equal rhs: {(DQ <'|'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'WIDTH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WIDTH='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'WIDTH='> name: WIDTH ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName RESULT))} {<Id.Lit_Colon ':'>} {(SQ <'[^\t]*\t\\(.*\\)'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PRINTF='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PRINTF='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PRINTF='> name: PRINTF ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName PRINTF) <'%-'> ($ Id.VSub_DollarName WIDTH) <.> (${ Id.VSub_Name WIDTH) <'s|'> ) } ) ] redirects: [] ) ] spids: [5876 5892] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName AGGREGATE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'PRINTF='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PRINTF='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PRINTF='> name: PRINTF ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName PRINTF) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'%s'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> ) } ) ] redirects: [] ) ] spids: [5954 5967] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'PRINTF='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PRINTF='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PRINTF='> name: PRINTF ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName PRINTF) <'%s'> <Id.Lit_BadBackslash '\\'> <n> ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<2>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SORT='> name:SORT) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xwhere>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <where> more_env: [] words: [{<where>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'WHERE='> name: WHERE ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName WHERE) <' || NR == 1'>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [6039 6057] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xorder>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xby>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Syntax error ('> ($ Id.VSub_Number 2) <')'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <syntax> more_env: [] words: [{<syntax>} {<select>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {<2>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<-a>} {(DQ ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <union>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xasc>)} {<-a>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xdesc>)} {<-a>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <Xnum>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <lookup_field> more_env: [] words: [ {<lookup_field>} {(DQ ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Bad field name ('> ($ Id.VSub_Number 1) <')'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SORT))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: { (DQ <'sort -t'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'SORTL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORTL='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORTL='> name: SORTL ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { ($ Id.VSub_DollarName OUTFIELDNUM ) } {<->} {<1>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName SORT) <' +'> ($ Id.VSub_DollarName SORTL) ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <Xnum>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name SORT) <n>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ <Xdesc>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name SORT) <r>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 3))} {<Id.Lit_Equals '='>} {(DQ <Xdesc>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name SORT) <r>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'SORT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SORT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SORT='> name: SORT ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName SORT) <' -'> ($ Id.VSub_DollarName OUTFIELDNUM) ) } ) ] redirects: [] ) ] spids: [6197 6249] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [6097 6115] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ <X> ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <Xunion>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'UNION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'UNION='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'UNION='> name: UNION ) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] spids: [6445 6463] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName INAGG))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'WHERE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WHERE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WHERE='> name:WHERE) op: assign_op.Equal rhs: {(DQ <'NR == 1'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName DISTINCT))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SORT))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'DIST='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DIST='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'DIST='> name: DIST ) op: assign_op.Equal rhs: { (DQ <'sort | uniq | tee /tmp/'> ($ Id.VSub_Dollar '$') <row> ) } ) ] redirects: [] ) ] spids: [6525 6541] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'DIST='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DIST='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DIST='> name:DIST) op: assign_op.Equal rhs: {(DQ <'uniq | tee /tmp/'> ($ Id.VSub_Dollar '$') <row>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6505 6523] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'DIST='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DIST='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DIST='> name:DIST) op: assign_op.Equal rhs: {(DQ <cat>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLEFILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLEFILE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TABLEFILE='> name:TABLEFILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TABLE) <'~'>)} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SORT))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName TABLE) <Id.Lit_TildeLike '~'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName SORT))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'TABLEFILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TABLEFILE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TABLEFILE='> name: TABLEFILE ) op: assign_op.Equal rhs: {(DQ <'/tmp/'> ($ Id.VSub_Dollar '$'))} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SUBSELECT))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$AWK'> more_env: [] words: [ {($ Id.VSub_DollarName AWK)} {<-F> (DQ <'\t'>)} { (DQ ($ Id.VSub_DollarName WHERE) <' {printf '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName PRINTF) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <', '> ($ Id.VSub_DollarName FIELDS) <' }'> ) } {($ Id.VSub_DollarName TABLEFILE)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName DIST))}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] spids: [6629 6640] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Pipeline children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName QUIET))} {<-o>} {(DQ ($ Id.VSub_DollarName INAGG))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<X>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cut> more_env: [] words: [ {<cut>} {<-d> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\t'> ch: '\t' ) } {<-f1>} {($ Id.VSub_DollarName TABLE) <Id.Lit_At '@'> } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} { (DQ <-> ($ Id.VSub_Number 1) <-> ($ Id.VSub_DollarName NOCR2) ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Sentence child: (command.ForEach keyword: <Id.KW_For for> iter_names: [HEADING] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} { (DQ ($ Id.VSub_DollarName TAB) <-> ($ Id.VSub_DollarName HEADING) <-> ($ Id.VSub_DollarName NOCR2) ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ )}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) ] spids: [6674 6699] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <Id.VSub_DollarName '$AWK'> more_env: [] words: [ {($ Id.VSub_DollarName AWK)} {<-F> (DQ <'\t'>)} { (DQ ($ Id.VSub_DollarName WHERE) <' { cnt += 1 ; printf '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName PRINTF) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <n> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <', '> ($ Id.VSub_DollarName FIELDS) <' }\n'> <'\t\t\tEND\t{ printf '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'( %1d rows)'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <n> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <', (cnt - 1) '> <'\t\t\t>'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/tmp/'> ($ Id.VSub_Dollar '$') <row> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' }'> ) } {<->} {($ Id.VSub_DollarName TABLEFILE)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName DIST))}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName DISTINCT))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <row>}] redirects: [] do_fork: T ) ] spids: [6841 6857] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'X='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'X='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'X='> name:X) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {<'/tmp/'> ($ Id.VSub_Dollar '$') <row> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } {<->} {<1>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'('>) ($ Id.VSub_DollarName X) (SQ <' rows)'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} {(DQ <'* '> ($ Id.VSub_DollarName NOCR2))} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<LINE>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'SQLPART='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SQLPART='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SQLPART='> name:SQLPART) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_Colon ':'>} {(SQ <'\\(..*\\)/.$'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName SQLPART))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName NEW))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_Colon ':'>} {(SQ <'.*/p/g$'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike '_CMD='> name: _CMD ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName _CMD)) (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_Colon ':'>} {(SQ <'\\(.*\\)/p/g$'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) (DQ ($ Id.VSub_DollarName NL)) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LINE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LINE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'LINE='> name: LINE ) op: assign_op.Equal rhs: {(DQ <'/p/g'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEW='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'NEW='> name: NEW ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] spids: [7039 7068] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName _CMD)) (DQ ($ Id.VSub_DollarName SQLPART)) (DQ ($ Id.VSub_DollarName NL)) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LINE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LINE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LINE='> name:LINE) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_Colon ':'>} {(SQ <'.*\\(/.\\)$'>)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEW='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEW='> name:NEW) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6998 7015] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName LINE))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <'/p'> pattern: (pat.Words words:[{<'/p'>} {<p>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName _CMD))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/g'> pattern: (pat.Words words:[{<'/g'>} {<g>}]) middle: <Id.Right_CasePat _> action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] right: <Id.Op_DSemi _> ) (CaseArm left: <'/p/g'> pattern: (pat.Words words:[{<'/p/g'>} {<pg>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName _CMD))}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/r'> pattern: (pat.Words words:[{<'/r'>} {<r>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <reset>)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/s'> pattern: (pat.Words words:[{<'/s'>} {<s>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {($ Id.VSub_DollarName UMASK)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.Simple blame_tok: <Id.VSub_DollarName '$SHELL'> more_env: [] words: [{($ Id.VSub_DollarName SHELL)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {<0000>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/e'> pattern: (pat.Words words:[{<'/e'>} {<e>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {($ Id.VSub_DollarName UMASK)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName _CMD))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/tmp/'> ($ Id.VSub_Dollar '$')} ) ] do_fork: T ) (command.Sentence child: (command.Simple blame_tok: <Id.VSub_DollarName '$EDITOR'> more_env: [] words: [ {($ Id.VSub_DollarName EDITOR)} {<'/tmp/'> ($ Id.VSub_Dollar '$')} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<'/tmp/'> ($ Id.VSub_Dollar '$')}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {<0000>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/i'> pattern: (pat.Words words:[{<'/i'>} {<i>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} {(DQ <'Enter include file: '> ($ Id.VSub_DollarName NOCR2))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<LINE>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName _CMD) (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName LINE)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) ($ Id.VSub_DollarName NL) ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName LINE) <' included'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/w'> pattern: (pat.Words words:[{<'/w'>} {<w>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName NOCR1)} {(DQ <'Enter output file: '> ($ Id.VSub_DollarName NOCR2))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<LINE>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName LINE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {($ Id.VSub_DollarName UMASK)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName _CMD))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName LINE))} ) ] do_fork: T ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {<0000>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName LINE) <' written'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/q'> pattern: (pat.Words words:[{<'/q'>} {<q>}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_EscapedChar '\\#'> pattern: (pat.Words words: [ {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\#'> ch:'#') <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName NEW))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName NEW))} {<Id.Lit_Equals '='>} {(DQ <Y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike '_CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_CMD='> name:_CMD) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName _CMD) ($ Id.VSub_DollarName LINE) ($ Id.VSub_DollarName NL) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEW='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEW='> name:NEW) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CMD='> name:CMD) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName _CMD))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-e>} { (DQ <'s/'> <Id.Lit_BadBackslash '\\'> <'\'/'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'/g'> ) } {<-e>} {(SQ <'s/\\"\\([^\\"]*\\)\\"/\\"\\\\"\\1\\\\"\\"/g'>)} {<-e>} {(SQ <'s/\\([<>!=][<>!=]*\\)/ \\1 /g'>)} {<-e>} {(SQ <'s/</\\\\</g'>)} {<-e>} {(SQ <'s/>/\\\\>/g'>)} {<-e>} {(SQ <'s/\\*/\\\\*/g'>)} {<-e>} {(SQ <'s/(/ \\\\( /g'>)} {<-e>} {(SQ <'s/)/ \\\\) /g'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName CMD))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Continue continue>) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName _IFS) <','>)} ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<set>} {<X>} {($ Id.VSub_DollarName CMD)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName _IFS))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEW='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEW='> name:NEW) op: assign_op.Equal rhs: {(DQ <Y>)} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_Number 1)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <select> pattern: (pat.Words words:[{<select>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <select_> more_env: [] words: [{<select_>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <create> pattern: (pat.Words words:[{<create>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <create> more_env: [] words: [{<create>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <delete> pattern: (pat.Words words:[{<delete>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <delete> more_env: [] words: [{<delete>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <drop> pattern: (pat.Words words:[{<drop>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <drop> more_env: [] words: [{<drop>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <insert> pattern: (pat.Words words:[{<insert>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <insert> more_env: [] words: [{<insert>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <update> pattern: (pat.Words words:[{<update>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <update> more_env: [] words: [{<update>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <edit> pattern: (pat.Words words:[{<edit>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$EDITOR'> more_env: [] words: [ {($ Id.VSub_DollarName EDITOR)} {($ Id.VSub_Number 2) <Id.Lit_At '@'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <help> pattern: (pat.Words words:[{<help>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <help> more_env: [] words: [{<help>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <print> pattern: (pat.Words words:[{<print>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <select_> more_env: [] words: [ {<select_>} {(DQ <select>)} {(SQ <'*'>)} {(DQ <from>)} {(DQ ($ Id.VSub_Number 2))} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Missing or unrecognized command.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] )