【问题标题】:How can I split a file based on multiple column values如何根据多个列值拆分文件
【发布时间】:2017-06-21 03:26:22
【问题描述】:

我需要获取这个 test_file 并将其拆分,以便为 col5 和 col6 的每个唯一组合生成一个单独的文件。 另一个警告是这个文件需要在 150,000 条记录后拆分。此外,还需要从文件中提取命名约定: "$5"_"$6"_P"sysdate"_IU"$4"60""[文件#]".zip

test_file.csv

col1, col2, col3, col4, col5, col6 ..... col32
1234, 6789, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1235, 1233, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1236, 4423, 1, 01/31/2017 00:00:00, 1000, 5678 ..... col32
1237, 3323, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1238, 0808, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1239, 2222, 1, 01/31/2017 00:00:00, 2000, 1234 ..... col32
1231, 4535, 1, 01/31/2017 00:00:00, 2000, 1234 ..... col32
1232, 8080, 1, 01/31/2017 00:00:00, 2000, 5678 ..... col32
1233, 7878, 1, 01/31/2017 00:00:00, 2000, 5678 ..... col32

结果应如下所示:

1000_1234_P20170203_IU20170131_60_1.ZIP
col1, col2, col3, col4, col5, col6 ..... col32
1234, 6789, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1235, 1233, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1237, 3323, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32
1238, 0808, 1, 01/31/2017 00:00:00, 1000, 1234 ..... col32

1000_5678_P20170203_IU20170131_60_1.ZIP
col1, col2, col3, col4, col5, col6 ..... col32
1236, 4423, 1, 01/31/2017 00:00:00, 1000, 5678 ..... col32

2000_1234_P20170203_IU20170131_60_1.ZIP
col1, col2, col3, col4, col5, col6 ..... col32
1239, 2222, 1, 01/31/2017 00:00:00, 2000, 1234 ..... col32
1231, 4535, 1, 01/31/2017 00:00:00, 2000, 1234 ..... col32

2000_5678_P20170203_IU20170131_60_1.ZIP
col1, col2, col3, col4, col5, col6 ..... col32
1232, 8080, 1, 01/31/2017 00:00:00, 2000, 5678 ..... col32
1233, 7878, 1, 01/31/2017 00:00:00, 2000, 5678 ..... col32

【问题讨论】:

    标签: unix awk split multiple-columns aix


    【解决方案1】:

    从这里开始:

    awk -F', *' -v sysdate="$(date +'%Y%m%d')" '
    NR==1 { hdr = $0; next }
    (cnt[$5,$6]++ % 150000) == 0 { sfx[$5,$6]++ }
    {
        split($4,d,/[\/ ]/)
        out = $5 "_" $6 "_P" sysdate "_IU" d[3] d[1] d[2] "_60_" sfx[$5,$6] ".zip"
        if (!seen[out]++) {
            print hdr > out
        }
        print > out
    }
    ' file
    

    并根据需要进行按摩。如果您不使用 GNU awk,您可能必须在使用时 close() 文件以避免“打开的文件过多”错误。

    【讨论】:

    • 谢谢埃德。除了第 4 列之外,它似乎有效,但这是由于日期格式。它在名称中放置了一个空格,所以我需要在文件中重新格式化它,以便它应该在之后工作。第一行也是标题,所以我需要跳过拆分它,但请确保将其添加到文件中。
    • 直到现在我才尝试打开这些文件。 ZIP 归档是否正常工作?每个文件都需要是压缩的 ZIP,以便通过 FTP 传输到门户页面。输入文件是 .csv,然后将文件拆分为这些 ZIP 文件。有什么想法吗?
    • 什么 zip 归档?该脚本会根据您的要求拆分文件,并根据您提供的输入生成您要求的输出。如果您需要压缩输出文件或对它们执行任何其他操作并且不知道如何执行此操作,请询问有关“zip”或您想要使用的任何工具的后续问题(该问题与与 awk)。
    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2022-11-14
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多