cap*_*ian 1 variables search awk file
我想在目录中的每个文件上运行一个AWK脚本,但是AWK命令必须只在该文件中运行 - 也就是说,它在定义的RS之间搜索并返回它应该的内容,但我需要它在它停止时到达一个文件的末尾,并在下一个文件的开头再次开始.
我有这个运行,它可以单独处理每个文件:
awk '!/value1|value2/ && NF {print FILENAME " - " RS,$1}' RS="value" file1 > result.txt
Run Code Online (Sandbox Code Playgroud)
但是,当使用时将输出应用于目录中的每个文件时输出不正确
find . -type f | awk ... file1 > result.txt
Run Code Online (Sandbox Code Playgroud)
我如何让它分别查看每个文件,但将结果附加到同一个文件中?不幸的是我不知道.我想这是通过将每个文件添加到变量中并让AWK查看它,但我不知道该怎么做.
interface Vlan3990
ip address 172.17.226.23 255.255.255.254
Run Code Online (Sandbox Code Playgroud)
version 12.2
ip tacacs source-interface Loopback99
ip vrf test
description xx
interface Loopback99
description Management Loopback
interface Loopback100
shutdown
Run Code Online (Sandbox Code Playgroud)
find . -type f | xargs awk '!/description|shutdown/ && NF {print FILENAME " - " RS,$1}' RS="interface" | more
./file1 - interface Vlan3990
./file2 - interface version
Run Code Online (Sandbox Code Playgroud)
我不确定输出'界面版'来自哪里......
仅适用于当前目录:
for file in *
do awk ... "$file"
done > result.txt
Run Code Online (Sandbox Code Playgroud)
如果您需要递归到子目录:
find . -type f -exec awk ... {} ; > result.txt
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您可能应该放在result.txt不同的目录中.否则,它将被匹配并用作输入文件.或者使用仅匹配所需文件的通配符,并且不匹配result.txt.