【问题标题】:How to combine two files sequentially based on certain conditions in Unix如何在Unix中根据某些条件顺序组合两个文件
【发布时间】:2020-07-15 12:52:45
【问题描述】:

我正在尝试在 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】:

    使用awk

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

    演示:

    $cat file1 file2 
    AAAAA|AAA|1582|YNYY
    BBBBB|BAV|1234|NYYY
    20190103|W 2019 01
    20190203|W 2019 02
    20190303|W 2019 03
    20190403|W 2019 04
    $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 &lt; "file2";

    for (i in a ) print b"|"a[i]"|"$0 a并追加变量b并从file2输入记录

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

    【讨论】:

    • 谢谢 Digvijay
    • 但是你能帮我得到以下格式的输出吗
    • AAAAA|1582|Y|20190103|W 2019 01 AAAA|1582|N|20190203|W 2019 02 AAAAA|1582|Y|20190303|W 2019 03 AAAA|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
    • file1中的第一条记录应该与file2中的所有记录匹配
    • 你不想要第一个文件的第二列吗?
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 2018-02-25
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多