【问题标题】:bash extract list file and group them into another filebash提取列表文件并将它们分组到另一个文件中
【发布时间】:2020-09-11 16:53:37
【问题描述】:

我有一个动态填充的文件,其中包含一些日期,每行一个,如下所示:

20190807
20190806
20190805
20190804

我创建了一个脚本来逐行读取文件,并将存在的文件列表提取到另一个目录中:

FILEMASTER="lista_master"
while IFS= read -r line
do
    ls -tr /var/home/test/*_"$line"_*.jpg | head -n2 >> lista_test
done < "$FILEMASTER"

这个脚本没问题,创建一个文件 (lista_test),包含每个日期的最后两个 .jpg 文件。输出样本:

/var/home/test/MAN_20190804_jolly1.jpg
/var/home/test/CAT_20190804_selly2.jpg
/var/home/test/RET_20190805_jolly1.jpg
/var/home/test/GES_20190805_angyt2.jpg
/var/home/test/TOR_20190806_jolly1.jpg
/var/home/test/GIL_20190806_gally2.jpg
/var/home/test/POE_20190807_frity1.jpg
/var/home/test/TAR_20190807_tally2.jpg

我的问题是这样的:

我应该为每个提取行提取不同的结果文件)“lista_test1”、“lista_test2”、“lista_test3”、“lista_test4”等)。不是一个文件中的所有文件。

【问题讨论】:

  • 根据什么条件lista_test需要拆分成lista_test1、lista_test2等?是否应该将 lista_test 的每一行提取到一个新文件中?
  • 欢迎来到 SO,我编辑了您的问题以使其更易于理解。请接tour,阅读How to Askminimal reproducible example
  • 只需在循环前添加一个计数器。并在循环内增加它并在输出文件中添加计数器。
  • counter=1; while .....; do .... &gt; "lista_test$counter"; ((counter++)); done &lt; "$file_master"

标签: bash extract


【解决方案1】:

由于您希望每个日期都有一个文件列表,因此请在循环中重复使用这些变量。像这样:

  • 假设您在文件(名为 dates_list.txt)中有一个日期列表,如下所示:

    20200101
    20200202
    20200303
    20200404
    
  • 那么您的脚本可能如下所示:

    while IFS= read -r line
    do
        ls -tr /var/home/test/*_"$line"_*.jpg | head -n2 > $line.list
    done < dates_list.txt
    

请注意,我会使用 &gt; 而不是 &gt;&gt;,以确保您不会在每次运行脚本时一遍又一遍地添加相同的文件。

  • 结果是:

    20200101.list        # contain the files *_20200101_*.jpg
    20200202.list        # contain the files *_20200202_*.jpg
    20200303.list        # contain the files *_20200303_*.jpg
    20200404.list        # contain the files *_20200404_*.jpg
    

【讨论】:

  • 嗨 Nic3500,脚本完美运行!很好,非常感谢您的支持
  • 很高兴,如果您接受答案(答案左侧的复选标记),我将不胜感激。
猜你喜欢
  • 2020-10-01
  • 1970-01-01
  • 2011-08-28
  • 2022-10-23
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
相关资源
最近更新 更多