我有2个不同的文件,一个文件带有Cust#,另一个文件带有Cusotmer#和名称。我想在两个基于Cust#的文件之间进行比较,并从与cust#匹配的file2中提取这些记录。我知道这在sql中很容易,但是在Unix中该如何做。任何人,任何建议..谢谢大家
文件1:
客户#
1
2
3
4
5
file2.txt:
Cust#| ad1 | ad2 | ad3 | ad4 | name1 | name2 | name3 | loc1 | loc2 | loc3 | city1 | city2 | city3 | st1 | st2 | st3 | st4
1|eee|ee|||||||||||city3|st1|st2|st3|st4
8|eee|ee|||||||||||city41|st15|st62|st73|st18
B|eee|ee|||||||||||city32|st51|st52|st53|st88
2|eee|ee|||||||||||city31|st13|st62|st3|st99
3|eee|ee|||||||||||city23|st11|st22|st33|st55
输出。
1|eee|ee|||||||||||city3|st1|st2|st3|st4
2|eee|ee|||||||||||city31|st13|st62|st3|st99
3|eee|ee|||||||||||city23|st11|st22|st33|st55
答案 0 :(得分:2)
这可能对您有用:
var radioValue = $("#radioID").val();
使用GNU sed的替代方法:
join -t\| -j1 <(sort file1) <(sort file2)
将第一个文件转换为sed脚本,并在对file2的sed的第二次调用中使用它。
答案 1 :(得分:1)
使用awk:
awk -F\| 'NR==FNR{ids[$1]=1;next}ids[$1]==1' file1 file2
编辑-添加说明:
在解析第一个文件时执行NR == FNR之后的块。它创建一个名为“ ids”的数组。 当awk完成解析第一个文件时,数组为:
ids[1] = 1
ids[2] = 1
ids[3] = 1
ids[4] = 1
ids[5] = 1
调用“ next”以避免执行脚本的其余部分(在解析第一个文件时)
ids[$1]==1
将检查第二个文件的每一行,如果ids [value_inside_first_column]等于1,则打印该行。
这等效于:
awk -F\| '
NR==FNR{
ids[$1]=1
}
NR!=FNR{
if(ids[$1]==1){
print $0
}
}'
使用grep很有趣,但我更喜欢awk或join版本:
grep -wF -f file1 file2
grep解决方案适用于您的示例,但不稳定,因为它将打印以下行:
B|eee|ee||||||1|||||city23|st11|st22|st33|st55
请注意,在file1示例中您有多余的空格字符,这会导致意外错误。