2014-01-17 103 views
-3

我需要执行以下任务。这些都包含在bash脚本中。bash脚本可以通过多个文件进行交互

1)从一个文件中读取如下所示的文件,以及所有具有变量的行 var1 =“AB”和var2 =“14003”我需要从列4中获取子字符串len 8,说在VAR3,(阵列,概率。或在一个循环,然后删除这些行。

2 *563587992014-01-26  2014-01-26T09:45:53  AB 14003 5   3.60 
2 563589242014-01-26  2014-01-26T10:03:13  AB 14003 6   4.80 
2 563589252014-01-26  2014-01-26T10:03:20  TC 14002 2   5.50 
2 563589272014-01-26  2014-01-26T10:03:34  FF 14002 3   3.30 

匹配字段标有* 2)然后我需要去通所收集的子串,并打开另一个文件,如下所示,并删除子字符串(4,8)匹配之前收集的var3的所有行

56370388 1 1.000 95   0.80Double Coffe 
    *56358799 1 1.000 94   0.40Milk‚ 
    *56358799 2 1.000 94   0.40Coffe‚ 
    56370388 1 1.000 97   0.40Descafe 

我想也许在嵌套循环中,使用awk和sed。但投入,将不胜感激:)

+1

多在样本输出数据似乎并不在您的示例输入中。关于S.O.的好Q将给出这个样本输入1. 2.示例输出。 3.堆栈溢出不是意味着免费编程的来源,所以你应该在你的问题中包括你当前的代码,4.你当前的输出,以及5.你对它为什么不工作的想法;-)确定?!? ;-)。也知道你可以使用输入框显示代码格式的左上角的'{}'工具。祝你好运。 – shellter

+0

为什么顶级文件第一行只有一颗星?第二排不应该有一颗明星吗? (第二行似乎也匹配'var1'和'var2' ..) –

回答

1

这里是一个开始:请尝试以下bash脚本:

#! /bin/bash 

var1="AB" 
var2="14003" 

awk -vv1="$var1" -vv2="$var2" '  
    NR==FNR { 
     if ($4==v1 && $5==v2) { 
      s=substr($0,4,8) 
      a[s]++ 
     } 
     next 
    } 
    !($1 in a) { 
     print 
    }' file1 file2 

输出:

56370388 1 1.000 95   0.80Double Coffe 
56370388 1 1.000 97   0.40Descafe 
+0

谢谢哈康Hægland,但它并不在我的系统工作。 如果我理解,脚本比较针对VV1和VV2的file1的每一行的第四位置,并且如果它们匹配,则生成分配给变量s的子字符串。请原谅我的无知,但如果有下一个,不应该也是FOR!? –

+0

@PedroCaldeira你是否收到任何错误信息? –

+0

@PedroCaldeira'next'语句与'awk'中的'for'无关。 'next'用于处理下一输入记录,跳过所有保留的规则在'awk'程序。请参见:http://www.gnu.org/software/gawk/manual/gawk.html#Next-Statement –

相关问题