嗨。我是unix脚本的新手,有人可以帮助我下面的内容

时间:2017-03-09 06:20:31

标签: bash unix

我有两个文件。

文件1--这是带有|的sql generate文件分隔符

sabari|27|22-12-1990|CHENNAI|
Siva|29|13-11-1989|CHENNAI|

文件2 - 我创建了硬核文件

Sabari|-|-|-|-|

Siva|-|-|-|-|

Ravi|-|-|-|-|

Bali|-|-|-|-|

如果值不在f1中,我想比较File-1中的值并将其放在File-1中。

Desired Out put

sabari|27|22-12-1990|CHENNAI|

Siva|29|13-11-1989|CHENNAI|

Ravi|-|-|-|-|

Bali|-|-|-|-|

有人可以帮助我/

1 个答案:

答案 0 :(得分:0)

我愿意:

awk '{k=tolower($1)}NR==FNR{a[k]=$0;next} k in a{$0=a[k]}1' FS=\| file1 file2

对第一个文件进行传递,将所有内容存储在第一个条目的内存中。然后传递第二个文件,检查第一个文件中是否给出了该行,如果看到该行,则打印该文件中的行。 " tolower"只是让比较不区分大小。

也许它更清晰地写成:

awk '{k=tolower($1)}NR==FNR{a[k]=$0;next}{print k in a ? a[k] : $0}' FS=\| file1 file2

NR == FNR技术是从第一个输入文件预加载数据的常用方法。