【问题标题】:Script to append multiple text files into single file将多个文本文件附加到单个文件中的脚本
【发布时间】:2019-05-09 11:21:57
【问题描述】:

我是 Unix 新手,我需要编写一个脚本。有人可以帮我解决我在目录中有文件列表的要求,如果文件名中的字符串模式匹配,我想合并文件吗?

AAAL_555A_ORANGE1_F190404_D190408.TXT.freshfruits_20190422-115617       
AAAL_555A_ORANGE2_F190404_D190408.TXT.freshfruits_20190422-115617       
AAAL_555A_ORANGE3_F190404_D190408.TXT.freshfruits_20190422-115617       
AAAL_555A_ORANGE4_F190404_D190408.TXT.freshfruits_20190422-115617     
AAAL_555B_ORANGE5_F190404_D190408.TXT.freshfruits_20190422-115617       
AAAL_555B_Orange6_F190404_D190408.TXT.freshfruits_20180422-115617 

如果文件名的第二部分='555A'且第三部分由 ORANGE 组成,则所有 Oranges/555A 内容文件将合并为一个文件名为 AAL_555a_Orange_date +"%Y%m%d".txt 的文件。

如果文件名的第二部分='555B'且第三部分由 ORANGE/555B 组成,则所有 Oranges 内容文件将合并为一个文件名为 AAL_555b_Orange_date +"%Y%m%d".txt 的文件。

如果文件名的第二部分='555A'且第三部分由 MANGO 组成,则所有 Mango 内容文件将合并为一个文件名为 AAL_555a_Mango_date +"%Y%m%d".txt 的文件。

请帮助..!

我知道以下命令将多个文件附加到一个 .但在这里我想根据文件名中存在的模式来做。

cat File1 file2 file3 >> final.txt

类似的东西

for i in *.TXT; do    
   while field separator='_' read -r str1 num str2 ; do    
     if [ "$str1" = "RTG" ]; then    

     fi         
   done     
done  

【问题讨论】:

  • 您对哪些文件应该放在另一个文件中的描述似乎相互矛盾或包含拼写错误,请修改它们(“MANGO [...] all Oranges content文件和类似文件)。您能否描述要遵循的模式而不是给出三个示例并让读者推断出模式?
  • 这是一个拼写错误,现在我已对其进行了修改。请帮助@BenjaminW。

标签: linux shell unix


【解决方案1】:

使用Bash variable substitutions

脚本循环所有 AAAL 起始文件,将它们的名称存储到变量 $in 并使用变量替换来处理名称,直到只剩下第二和第三部分(例如 AAAL_555A_ORANGE1_F190404.TXT -> @987654325 @)。

请参阅脚本中的 cmets 以获取分步示例和链接文档以了解替换说明:

$ for in in AAAL*
  do                              # for example       AAAL_555A_ORANGE1_F190404.TXT
      out=${in#*_}                # remove AAAL_        -> 555A_ORANGE1_F190404.TXT
      out=${out%_*}               # remove _F190404.TXT -> 555A_ORANGE1
      out=${out%[0-9]}            # remove 1            -> 555A_ORANGE
      cat $in >> AAAI_$out.txt
  done
$ ls -1 AAAI*
AAAI_555A_MANGO.txt
AAAI_555A_ORANGE.txt
AAAI_555B_APPLE.txt
AAAI_555B_Orange.txt
AAAI_555B_ORANGE.txt

【讨论】:

  • 你能详细解释一下吗@James Brown
  • 如果我们在 Orange 之后有两位数(如 ORANGE12 AAAL_555A_ORANGE12_F190404_D190408.TXT.freshfruits_20190422-115617 @James Brown),则它不起作用
  • 是的,我注意到您更改了文件名,但预期的输出是什么?问题不是很容易理解。另外,清理所有 mango 引用,因为文件中不再包含该词。
猜你喜欢
  • 2011-07-31
  • 2011-07-24
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多