繁体   English   中英

使用awk在第n个逗号后循环添加逗号

[英]loop add a comma after nth comma using awk

我觉得这应该是一个相当直截了当的问题,但我似乎无法使其正常工作。

我有一个csv文件,我需要在每行的第n个逗号后添加逗号。 我相信我必须使用gsub使其循环。 就像是

{gsub(/$nth/,/",")}

但我对awk的理解不够,无法使其正常工作。

我脚本的最终目标是检查单词是否存在以及在第n个逗号之后是否不添加逗号。

我正在使用grep这样的部分:

TEST1=$(cat $file | grep 'Sentence Skills')
 if [ $? -eq 1 ]
  then
  awk command to add comma after nth comma
 fi

如果不存在,我需要在第n个逗号后添加一个逗号,以确保所有内容正确排列

更新以阐明示例输入和输出(我很抱歉,如果没有那么我本来不打算包括grep)

这是csv的示例:

last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,College Level Math 76,Elementary Algebra 115,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Elementary Algebra 34,
last,first,A00XXXXXX,1888-01-01,2015-05-13,College Level Math 64,Elementary Algebra 114,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 87,College Level Math 64,Elementary Algebra 114,

这就是我需要的样子:

last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,College Level Math 76,Elementary Algebra 115,
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,,Elementary Algebra 34,
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,College Level Math 64,Elementary Algebra 114,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 87,,College Level Math 64,Elementary Algebra 114,

如果阅读理解不存在,我需要在第5个逗号后面添加一个逗号,如果不存在句子技巧,则需要在第6个逗号之后添加一个逗号,如果不存在大学水平数学,则需要在第7个逗号之后添加一个逗号,如果基本代数不存在,则使用一个逗号。

如果确实存在,则不添加逗号,而是跳到下一个。

我认为用解决它可能是一项艰巨的任务。 在这里,您可以使用 区别在于,我可以使用哈希,对其进行排序并使用splice在数组中间添加项目。

perl -F',' -lanE '
    BEGIN {
        %h = ( 
            5 => q|Reading Comprehension|,
            6 => q|Sentence Skills|,
            7 => q|College Level Math|,
            8 => q|Elementary Algebra|,
        );  
    };  
    for (sort keys %h) {
        if ($F[$_] !~ m/^$h{$_}/) {
            splice @F, $_, 0, q||;
            ++$_;
        }   
    }
    printf qq|%s,\n|, join q|,|, @F;
' infile

-F含义与相同,因此我遍历哈希并检查该字段号是否包含该值。 如果不匹配,则在其前面插入一个空元素,最后一个printf用逗号将所有字段连接在一起。 它产生:

last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,College Level Math 76,Elementary Algebra 115,
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,,Elementary Algebra 34,
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,College Level Math 64,Elementary Algebra 114,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 87,,College Level Math 64,Elementary Algebra 114,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM