在多个输入文件上迭代并执行Awk函数并生成不同的输出文件

时间:2017-04-23 08:59:01

标签: python bash perl shell awk

我在文件夹中有数百个大文本文件 test1,test2,test3,.....,test100

每个测试文件都有文本条目。我的工作是阅读每个文本文件,然后在每个文本文件的每个空行上拆分每个测试$ i文件,并创建各种新的文本文件。

例如:如果test1.txt有3个空行,那么生成的文件数将是4个文本文件,每个新文件的名称为 test1.1,test1.2,test1.3,test1.4 {参考= Splitting large text file on every blank line}

我为一个文件做了这个,它完美有效,我得到了各种文件 test1.1,test1.2,test1.3,test1.4

awk -v RS= '{print > ("test1." NR ".txt")}' test1

但是当我尝试在循环中为多个文件执行此操作时,

for i in {1..100}; do awk -v RS= '{print > ("test" $i "." NR ".txt")}' test$i; done

它不起作用。我想知道,为什么$ i的值不会传递到awk函数中,并且它不会将不同的空单独文件打印为 test1.1,test1.2,test1.3 ...... test2 .1,test2.2 ......等......

我看到的一个问题是:" 文件名太长"。 参考链接:Limit on file name length in bash

请帮助我理解并修复它或更好的方法来完成这项任务。

1 个答案:

答案 0 :(得分:2)

仅使用awk:

$ awk -v RS= '{f=(FILENAME "." FNR ".txt"); print > f; close(f)}' test*