我觉得这应该是一个相当直接的问题,但我似乎无法让它发挥作用。
我有一个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 if if then fi part)
以下是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个逗号之后添加一个逗号,如果大学水平数学没有如果不存在初等代数,则存在一个逗号。
如果其中任何一个确实存在,则不会添加逗号并跳到下一个逗号。
答案 0 :(得分:1)
在我看来,用awk解决它可能是一项艰巨的任务。这里有perl的方法。不同之处在于我可以使用哈希,对其进行排序,并使用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
与awk具有相同的含义,因此我遍历哈希并检查该字段编号是否包含该值。如果它不匹配,则在它之前插入一个空元素,最后一个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,