2017-09-16 99 views
-6

File1:每条记录以'〜'开始,并且像下面的&这样的数字以相同的结尾。每条记录在开始和结束行之间有八行,并带有一些'_'。基于一些条件合并两个文本文件

 ~1 
    001 
    COMON 
    _ 
    98273497335 
    _ 
    _ 
    003 
    +7346542347 
    ~1 
    ~2 
    001 
    . 
    . 
    ~2.........so on 

File2:它包含每个记录的默认值,如下所示。它只包含一条记录。 File1中的每条记录应与File2进行比较,并将所有'_'替换为File2中相对于该位置的默认值。

~ 
    001 
    COMON 
    0000000000 
    0 
    00 
    00000 
    +0.0 
    +0000000000 
    ~ 

输出文件:在“_”从文件1,应通过文件2的记录中的相应位置的默认值取代。

~1 
001 
COMON 
0000000000 
98273497335 
00 
00000 
003 
+7346542347 
~1 
~2 
001 
. 
. 
~2.........so on 
+2

[Stack Overflow](http://stackoverflow.com/tour)是专业和爱好者程序员的问答网站。请展示您的编码工作。 – Cyrus

+0

好吧,我对shell脚本没有太多的想法。一旦我得到了我可以实现的想法,然后我会自己回复一些解决方案。我希望我能在这里得到一些帮助...... – user8552135

+0

我没有看到问题出现了什么问题,要求很明确,带有示例输入和输出。 “缺乏研究”,或许,但不是“太宽泛”。 –

回答

1

为此,您可以用awk:

awk 'NR == FNR { line[NR] = $1; next } 
    { print ($1 == "_" ? line[(FNR - 1) % 10 + 1] : $1) }' file2 file1 

NR == FNR目标的第一个文件。使用行号NR作为关键字,从file2中读取并保存10行。

由于第一个块中的next,第二个块用于第二个文件。如果第一个字段为“_”,则使用该行的替代值,(FNR - 1) % 10 + 1生成序列1..10 1..10 1..10等,因此将使用查找数组中的对应行。

+0

谢谢,汤姆..我感谢你的帮助。 – user8552135

+0

@ user8552135没问题,它是做你想做的吗? –