【发布时间】:2015-09-09 23:08:53
【问题描述】:
我有一个这样的 csv 文件:
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 67,Reading Comprehension 59,Elementary Algebra 41
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 44,Reading Comprehension 40
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 39
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 41,Sentence Skills 82
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 104,Elementary Algebra 82
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 85
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 51
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 71,Sentence Skills 54,Elementary Algebra 33
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 70,Elementary Algebra 23,Arithmetic 42,Sentence Skills 75
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 96,Reading Comprehension 88
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 53,Sentence Skills 97
前 5 列始终相同,后 5 列始终处于不同的顺序。我需要保持前 5 列相同,并将后 5 列重新排序,使其始终按照以下顺序阅读理解、句子技巧、算术、大学水平数学、初等代数
如果其中一个字符串不存在,则添加逗号
所以最终的结果应该是这样的:
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 59,Sentence Skills 67,,,Elementary Algebra 41
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 40,Sentence Skills 44,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 39,,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,Sentence Skills 82,,,Elementary Algebra 41
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,Sentence Skills 104,,,Elementary Algebra 82
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,Sentence Skills 85,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,,,,Elementary Algebra 51
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 71,Sentence Skills 54,,,Elementary Algebra 33
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 70,Sentence Skills 75,Arithmetic 42,,Elementary Algebra 23
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 88,Sentence Skills 96,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,Sentence Skills 97,,,Elementary Algebra 53
如果它们总是以相同的顺序,我可以这样做:
awk -F, -v OFS=, '!/Reading Comprehension/ { $5 = $5 "," } 1'
如果他们至少总是在同一列中,我可以做一个
awk {print $1,$2,$3,$4,$5,$7,$8,$6,$9,$10}
但每一行的顺序不同,最后有一个数字变量,因为我抛出了一个循环。
我想用 AWK 来做这件事,但我现在对任何事情都持开放态度。
从逻辑上讲,我认为我需要做类似的事情:j = Reading*,i = Sentence*,k = Arithmetic *,l = College *,m = Elementary *
然后 awk {打印 $6j,$7i,$8k,$9l,$10m}
但我的谷歌搜索返回的结果很少。所以即使评论是看这里或寻找这个或查看这个答案......我们将不胜感激
注意:我已尽力确保输入和输出正确。我已经发布了另一个与此类似的问题,但那是列始终处于相同顺序的情况。所以这是一个不同的请求。
【问题讨论】: