将awk模式应用于具有相同名称的所有文件,将每个文件输出到新文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将awk模式应用于具有相同名称的所有文件,将每个文件输出到新文件相关的知识,希望对你有一定的参考价值。

我试图以递归方式在目录中查找具有相同名称的所有文件,对它们应用awk模式,然后输出到每个文件都存在该文件的新更新版本的目录。

我认为使用for循环比使用xargs更好,但我不知道如何使这个工作...

for f in $(find。-name FILENAME.txt); do awk -F“\(corr \)”'{print $ 1,$ 2,$ 3,$ 4}'./ FINILAME.txt> ./newFILENAME.txt $ f; DONE

最后,我希望能够使用-F一次性从文件中删除多个字符串,但也不确定如何使用awk执行此操作。

还有一种方法可以删除“(cor *)”,其中*表示通配符?不确定如何保持括号的转义序列

谢谢!

答案

要使用(corr*)作为字段分隔符,其中*是一个glob样式的通配符,请尝试:

awk -F'[(]corr[^)]*[)]' '{print $1,$2,$3,$4}'

例如:

$ echo '1(corr)2(corrTwo)3(corrThree)4' | awk -F'[(]corr[^)]*[)]' '{print $1,$2,$3,$4}'
1 2 3 4

要将此命令应用于名为FILENAME.txt的当前目录下的每个文件,请使用:

find . -name FILENAME.txt -execdir sh -c 'awk -F'\''[(]corr[^)]*[)]'\'' '\''{print $1,$2,$3,$4}'\'' "$1" > ./newFILENAME.txt' Awk {} \;

Notes

不要使用:

for f in $(find . -name FILENAME.txt ); do

如果任何文件或目录中包含空格或其他shell-active字符,结果将是一个令人不快的惊喜。

Handling both parens and square brackets as field separators

考虑这个测试文件:

$ cat file.txt
1(corr)2(corrTwo)3[some]4

要消除这两种类型的分隔符并打印前四列:

$ awk -F'[(]corr[^)]*[)]|[[][^]]*[]]' '{print $1,$2,$3,$4}' file.txt
1 2 3 4

以上是关于将awk模式应用于具有相同名称的所有文件,将每个文件输出到新文件的主要内容,如果未能解决你的问题,请参考以下文章

自动创建一个视图,该视图将所有其他具有相同名称但不同前缀和不同模式的视图联合起来

如何将 Git 补丁应用于具有不同名称和路径的文件?

将渐变层添加到具有相同名称 Xcode/Swift 的所有按钮

将 :hover 样式应用于具有相同类的所有元素

合并/合并几个PDF文件[重复]

应用所有模板