【问题标题】:Merge two text files based on some condition [closed]根据某些条件合并两个文本文件[关闭]
【发布时间】:2018-02-25 08:30:05
【问题描述】:

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
    ~

OUTPUT 文件:File1 中的“_”应替换为记录对应位置的 File2 的默认值。

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

【问题讨论】:

  • Stack Overflow 是一个面向专业和爱好者程序员的问答网站。请展示您的编码工作。
  • 好吧,我对 shell 脚本不太了解。一旦我有了可以实施的想法,然后我会自己回答某种解决方案。我希望到时候我能在这里得到一些帮助......
  • 我看不出这个问题有什么问题,要求很明确,有样本输入和输出。 “缺乏研究”,也许,但一点也不“太宽泛”。

标签: bash unix sed


【解决方案1】:

您可以使用 awk 做到这一点:

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

NR == FNR 以第一个文件为目标。从file2中读取并保存10行,以行号NR为key。

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

【讨论】:

  • 谢谢,汤姆..感谢您的帮助。
  • @user8552135 没问题,它做你想做的事吗?
  • @TomFenech 我可以看到 OP 不接受您的答案,但我对其进行了测试,它可以按照 OP 的要求工作。谢谢。这是一个有趣的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 2021-08-14
  • 2019-06-14
  • 2015-07-01
  • 2017-07-02
  • 2016-11-21
  • 1970-01-01
相关资源
最近更新 更多