如何根据Unix中的某些条件顺序合并两个文件

问题描述 投票:0回答:1

我正在尝试在Unix中格式化文件(在这种情况下为RHEL)。

文件1

AAAAA|AAA|1582|YNYY
BBBBB|BAV|1234|NYYY

文件1有1个样本记录(行)。每个记录中有4列。在第4列中,我们有4个状态值。

文件2

20190103|W 2019 01
20190203|W 2019 02
20190303|W 2019 03
20190403|W 2019 04

输出必须如下:

AAAAA|1582|Y|20190103|W 2019 01
AAAAA|1582|N|20190203|W 2019 02
AAAAA|1582|Y|20190303|W 2019 03
AAAAA|1582|Y|20190403|W 2019 04
BBBBB|1234|N|20190103|W 2019 01
BBBBB|1234|Y|20190203|W 2019 02
BBBBB|1234|Y|20190303|W 2019 03
BBBBB|1234|Y|20190403|W 2019 04

我尝试了AWK和粘贴,但无法获得所需的输出。请引导我解决这个问题。

unix rhel
1个回答
0
投票

使用awk

awk -F'|' '{split($4,a,""); b=$1"|"$2"|"$3} { getline < "file2"; for (i in a ) print b"|"a[i]"|"$0  }' < file1`

演示:

$awk -F'|' '{split($4,a,""); b=$1"|"$2"|"$3} { getline < "file2"; for (i in a ) print b"|"a[i]"|"$0  }' < file1
AAAAA|AAA|1582|Y|20190103|W 2019 01
AAAAA|AAA|1582|N|20190103|W 2019 01
AAAAA|AAA|1582|Y|20190103|W 2019 01
AAAAA|AAA|1582|Y|20190103|W 2019 01
BBBBB|BAV|1234|N|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
$

说明:

awk -F'|'

'{split($4,a,"");

b=$1"|"$2"|"$3}

getline < "file2";

[for (i in a ) print b"|"a[i]"|"$0 a并附加变量b和来自file2的输入记录

注意:当您使用内部变量getline的值$0, NF, NR时被更改

© www.soinside.com 2019 - 2024. All rights reserved.