【问题标题】:script for splitting a file based on number of lines根据行数拆分文件的脚本
【发布时间】:2022-12-07 00:42:38
【问题描述】:

我需要帮助根据每个子文件允许的最大行数将一个大文件(160 万条记录)拆分为多个文件,但需要注意的是订单不应跨文件溢出并出现在多个文件中。

关于文件的快速概述: 该文件包含有关零售店交易的订单信息。每个订单可以有多个项目。下面是示例文件的一个小示例。

样本文件:

order_nu item_nu Sale
1 1 10
1 2 20
1 3 30
2 1 10
2 2 20
3 1 10
3 2 10
4 1 20
4 2 24
4 3 34
4 4 10
4 5 20
5 1 30
5 2 20
5 3 40

是否可以编写一个 Linux 脚本来帮助我根据行数拆分文件,但要注意一个命令不应跨文件溢出并出现在多个文件中。 例如,对于上面的文件,我需要将其拆分,条件是每个文件的单个子文件不应超过 5 条记录,并且一个订单不应出现在多个文件中(假设一个订单不会有更多超过 5 项)。以下是预期的输出:

子文件 1: | order_nu | item_nu |销售 | | ------ | ------|--------| | 1 | 1 | 10 | | 1 | 2 | 20 | | 1 | 3 | 30 | | 2 | 1 | 10 | | 2 | 2 | 20 |

子文件 2: | order_nu | item_nu |销售 | | ------ | ------|--------| | 3 | 1 | 10 | | 3 | 2 | 10 |

子文件 3: | order_nu | item_nu |销售 | | ------ | ------|--------| | 4 | 1 | 20 | | 4 | 2 | 24 | | 4 | 3 | 34 | | 4 | 4 | 10 | | 4 | 5 | 20 |

子文件 4: | order_nu | item_nu |销售 | | ------ | ------|--------| | 5 | 1 | 30 | | 5 | 2 | 20 | | 5 | 3 | 40 |

如果有任何问题,请告诉我 谢谢!

【问题讨论】:

标签: linux bash split


【解决方案1】:

尝试这样的事情

max_lines=x
counter=1

while read line;
 do
   echo $line >> sub_file$counter.txt
   if [ `wc -l < sub_file$counter.txt` -gt $max_lines ]
   then
     counter=$((counter+1))
   fi
done < sample_file.txt

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多