bash script - 在目录上迭代合并文件 [英] bash script - iterative merge files on a directory

查看:236
本文介绍了bash script - 在目录上迭代合并文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我想要在input_directory中迭代合并文件,并将合并的文件放在output_directory中。假设在input_directory中有file1.txt,file2.txt, file3.txt



我想要输出目录包含以下文件:




  • merge1.txt:与file1.txt相同

  • merge2.txt:merge file1.txt file2.txt

  • merge3.txt:merge file1 .txt file2.txt file3.txt



我几乎没有使用过bash脚本的经验,很明显,迭代器在for循环中,但我不知道如何。



提前谢谢。

解决方案

它附加到输出并在下一次迭代期间使用:

 #!/ bin / bash 

touch prev #a temp变量保存以前的文件名
i = 1;

用于$(ls / INPUT / file *)中的文件;
do
cat / OUTPUT / $ prev / INPUT / $ file> / OUTPUT / merge $ i;
prev = merge $ i;
let i = i + 1
done

fact ls 列出排序中具有相同前缀的文件。如果您具有不同前缀的文件名,并且具有要输出它们的特定顺序,则可以修改它。


Hello I want to iteratively merge the files in input_directory and put the merged ones in output_directory.

Suppose in input_directory I have : file1.txt, file2.txt, file3.txt

I want to the output directory to contain the following files:

  • merge1.txt : same as file1.txt
  • merge2.txt : merge file1.txt file2.txt
  • merge3.txt : merge file1.txt file2.txt file3.txt

I have almost no experience with bash scripts, it is obvious that it can be done with an iterator in a for loop, but I don't know how.

Thank you in advance..

解决方案

Store the previous filename that was appended to output and use it during next iteration:

#!/bin/bash

touch prev #a temp variable to hold previous filename
i=1;

for file in $(ls /INPUT/file*); 
do 
   cat /OUTPUT/$prev /INPUT/$file > /OUTPUT/merge$i;
   prev=merge$i;
   let i=i+1
 done

This code takes advantage of the fact ls list the files in sorted when they have same prefix. You can modify it if you have filenames with different prefixes and have a specific order in which you want to output them.

这篇关于bash script - 在目录上迭代合并文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆