我有三个文件,一个数据文件,一个查询文件,另一个查询文件
数据文件的一个字段必须更改一个值,该值可以在查找文件中找到。
数据文件如下:
2013-04-24;1;0.1635;1.4135
2013-04-24;1;0.9135;1.4135
2013-04-24;2;0.9135;1.4135
查找文件如下:
1;2ab1e4c0-de4d-11e2-a934-0f0479162b1b
2;2ab21e90-de4d-11e2-9ce8-d368d9512bad
3;2ab2582e-de4d-11e2-bb5f-6b1f6c4437f8
结果必须是:
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b 0.1635 1.4135
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b 0.9135 1.4135
2013-04-24 2ab21e90-de4d-11e2-9ce8-d368d9512bad 0.9135 1.4135
要在上面的输出中使用的另一个查找文件:
2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA
2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA
2ab21e90-de4d-11e2-9ce8-d368d9512bad CCC
我希望最终输出为:
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.1635 1.4135
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.9135 1.4135
2013-04-24 2ab21e90-de4d-11e2-9ce8-d368d9512bad CCC 0.9135 1.4135
这是我的awk命令,我也在这里找到:
awk -F';' 'NR==FNR{a[$1]=$2;next}{$2=a[$2]}1' Datafile.csv Lookupfile1.csv
答案 0 :(得分:0)
交换文件顺序:
#include <stdio.h>
#include <math.h>
int getYearOfBirth (void); // prompt user to enter a year of birth , below 1900 show no valid
int main () {
int y;
y = getYearOfBirth();
printf("%d\n\n",y);
return 0;
}
int getYearOfBirth (void) {
int yearOfBirth;
int confirm1;
while (1) {
printf("Please enter your year of birth:\n");
scanf("%d", &yearOfBirth);
if (yearOfBirth < 1900) {
printf("Warning! The year you entered is not valid!\n");
printf("Please Enter Again.\n");
continue;
}
printf("Your year of birth is: %d\n",yearOfBirth);
printf("Is it correct? Enter 1 for YES to Continue ,0 for NO and Re-Enter\n");
scanf("%d",&confirm1);
if (confirm1 == 1) {
printf("Year of birth confirmed\n\n\n");
break;
}
}
return yearOfBirth;
}
逻辑继续进行第二次查找:
awk -F';' 'NR==FNR{a[$1]=$2;next}{$2=a[$2]}1' Lookupfile1.csv Datafile.csv
答案 1 :(得分:0)
您可以为此使用简单的unix命令join
:
mayankp@mayank:~/$ join -1 2 -2 1 -t';' -o 1.1,2.2,1.3,1.4 datafile.txt lookup1.txt | sed 's/;/ /g'
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b 0.1635 1.4135
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b 0.9135 1.4135
2013-04-24 2ab21e90-de4d-11e2-9ce8-d368d9512bad 0.9135 1.4135
将上述临时输出写入文件res.txt
中。然后,将此文件与第二个查找文件结合起来以获取最终结果
mayankp@mayank:~/$ join -1 2 -2 1 -t';' -o 1.1,2.2,1.3,1.4 datafile.txt lookup1.txt | sed 's/;/ /g' > res.txt
mayankp@mayank:~/$ join -1 2 -2 1 res.txt lookup2.txt -o 1.1,1.2,2.2,1.3,1.4 |uniq
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.1635 1.4135
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.9135 1.4135
2013-04-24 2ab21e90-de4d-11e2-9ce8-d368d9512bad CCC 0.9135 1.4135
有了这个,您不必记住复杂的语法。让我知道是否有帮助。
OR
您可以在一行中组合以上命令:
mayankp@mayank:~/$ join -1 2 -2 1 <(join -1 2 -2 1 -t';' -o 1.1,2.2,1.3,1.4 datafile.txt lookup1.txt | sed 's/;
/ /g') lookup2.txt -o 1.1,1.2,2.2,1.3,1.4 |uniq
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.1635 1.4135
2013-04-24 2ab1e4c0-de4d-11e2-a934-0f0479162b1b AAA 0.9135 1.4135
2013-04-24 2ab21e90-de4d-11e2-9ce8-d368d9512bad CCC 0.9135 1.4135