下面的命令正是我所需要的,它检查列中是否存在字符串,如果没有,则添加逗号。
awk -F, -v OFS=, '!/Reading Comprehension/ { $5 = $5 "," } 1' somefile.csv \
| awk -F, -v OFS=, '!/Sentence Skills/ { $6 = $6 "," } 1' \
| awk -F, -v OFS=, '!/Arithmetic/ { $7 = $7 "," } 1' \
| awk -F, -v OFS=, '!/College Level Math/ { $8 = $8 "," } 1' \
| awk -F, -v OFS=, '!/Elementary Algebra/ { $9 = $9 "," } 1' > endfile.csv如何将这个连接/管道命令转换为awk循环?
我在想这样的事情:
awk -F, OFS=,
i = Reading Comprehension, Sentence Skills, Arithmetic, College Level Math, Elementary Algebra
j = 5,6,7,8,9
{for ((i<=NF; j<=NF) '!/i/ { $j = $j "," } 1')}样本输入:
last,first,A00XXXXXX,1888-01-01,2015-05-13,Elementary Algebra 34
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,Sentence Skills 104,Arithmetic 08,College Level Math 76,Elementary Algebra 115
last,first,A00XXXXXX,1888-01-01,2015-05-13,College Level Math 76,Elementary Algebra 115
last,first,A00XXXXXX,1888-01-01,2015-05-13,Sentence Skills 104,Elementary Algebra 115样本输出:
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,,,Elementary Algebra 34
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,Arithmetic 08,College Level Math 76,Elementary Algebra 115
last,first,A00XXXXXX,1888-01-01,2015-05-13,,Sentence Skills 104,,College Level Math 76,Elementary Algebra 115
last,first,A00XXXXXX,1888-01-01,2015-05-13,,,,College Level Math 76,Elementary Algebra 115
last,first,A00XXXXXX,1888-01-01,2015-05-13,,Sentence Skills 104,,,Elementary Algebra 115我仍然在学习AWK,并且只对如何做awk循环有一个部分的理解。
任何帮助都将不胜感激,给出答案的解释将是令人惊奇的。
发布于 2015-06-23 19:25:24
这个答案假设每个类别中的第一个单词是唯一的:
awk -F, -v OFS=, '
{
delete val # clear the previous values if any
for (i=6; i<=NF; i++) {
split($i, a, " ")
val[a[1]] = $i # a[1] is the first space-separated word
}
print $1,$2,$3,$4,$5, val["Reading"], # null values are OK
val["Sentence"],
val["Arithmetic"],
val["College"],
val["Elementary"]
}
' input发布于 2015-06-23 18:27:56
您可以执行以下操作,但是由于我们更改了每个缺失列的NF,所以需要进行一些awk数组舞蹈。
BEGIN
{
FS=OFS=","
n=split("Reading Comprehension,Sentence Skills,Arithmetic,College Level Math,Elementary Algebra",c,",")
}
{
delete a;
for (i=6;i<=NF;i++) {
for (j=1;j<=n;j++) {
if ($i ~ c[j]) a[j]=$i
}
}
print $1,$2,$3,$4,$5,a[1],a[2],a[3],a[4],a[5]
}https://stackoverflow.com/questions/31008106
复制相似问题