我在文件夹中有数百个大文本文件 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
请帮助我理解并修复它或更好的方法来完成这项任务。
答案 0 :(得分:2)
仅使用awk:
$ awk -v RS= '{f=(FILENAME "." FNR ".txt"); print > f; close(f)}' test*