【发布时间】:2016-03-30 06:54:22
【问题描述】:
while read line1
do
while read line2
do
while read line3
do echo "$line1, $line2, $line3" | awk -F , ' $1==$5 && $6==$11 && $10==$12 {print $1,",",$2,",",$3,",",$4,",",$6,",",$7,",",$8,",",$9,",",$10,",",$13,",",$14,",",$15}' >>out.txt
done < grades.csv
done < subjects.csv
done < students.csv
在此代码中,我按行(叉积)合并三个文件,如果任何合并的行满足条件“$1==$5 && $6==$11 && $10==$12”,我将在输出文件中打印它们. 现在我的问题是,如果满足条件,我想继续为每次迭代添加“$13”字段值。
我该怎么做?请帮忙。 这是示例文件。
gardes.csv 包含行:
1,ARCH,1,90,very good,80
1,ARCH,2,70,good,85
1,PLNG,1,89,very good,85
subjects.csv 包含行:
1,ARCH,Computer Architecture,A,K.Gose
1,PLNG,Programming Languages,A,P.Yang
1,OS,Operating System,B,K.Gopalan
2,ARCH,Computer Architecture,A,K.Gose
students.csv 包含行:
1,pankaj,vestal,986-654-32
2,satadisha,binghamton,879-876-54
5,pankaj,vestal,986-654-32
6,pankaj,vestal,986-654-31
这是预期的输出:
ARCH 1 pankaj vestal 986-654-32 Computer Architecture A K.Gose 1 1 90 very good 80
ARCH 1 pankaj vestal 986-654-32 Computer Architecture A K.Gose 1 2 70 good 85
ARCH 2 satadisha binghamton 879-876-54 Computer Architecture A K.Gose 1 1 90 very good 80
ARCH 2 satadisha binghamton 879-876-54 Computer Architecture A K.Gose 1 2 70 good 85
PLNG 1 pankaj vestal 986-654-32 Programming Languages A P.Yang 1 1 89 very good 85
我还需要另一个可以写入文件的 shell 变量中的 (90+70+90+70+89) 的总和。
【问题讨论】:
-
@fedorqui 和@Ryan 希望添加的完整代码和输入文件能帮助您帮助我。谢谢
-
csv 文件很危险。当您有一个带有
,的字段时,代码将中断。7,ARCH,1,90,"very, very good",80或学生5,Louis,"Paris, France",986-654-32怎么样? -
@Walter,是的,但根据我的要求,我将在其中包含不带逗号的字段。逗号只是分隔符。