我有数百个大文本文件,如test1,test2,test3,.....,test100在一个文件夹中。在多个输入文件中迭代和执行Awk函数并生成不同的输出文件
这些测试文件中的每一个都有文本条目。我的工作是阅读每个文本文件,然后在每个文本文件的每一行中分割每个测试$ 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
请帮助我理解和解决它或一些更好的方法来完成此任务。
是。谢谢。这工作绝对好,但我想知道,如果我需要导出输出f =(FILENAME“。”FNR“.txt”)在不同的文件位置可以说在文件夹桌面/ tmp中,如何继续? – Linguist
'f =(“/ path/to /”FILENAME“。”FNR“.txt”)' –