仅对以“xyz”开头的文件使用 awk

仅对以“xyz”开头的文件使用 awk

我目录中有 3 个文件:xyz1.txt、,我只想处理前两个文件(以 xyz 开头的文件)。该命令将返回所有这三个文件。我可以xyz2.txt对命令进行哪些修改以仅指定 xyz* 文件?我试图认为它会确保文件以 xyz 开头,但这并不能排除。rst_xyz.txtls | awk '/xyz/{print $1}'ls | awk '/^xyz/{print $1}'rst_xyz.txt

答案1

不要解析ls

你要

awk '...' xyz*

如果由于某些非常奇怪的原因,您想完全在 awk 中完成此操作:

awk 'FILENAME ~ /^xyz/ { .... }' *

答案2

不需要 awk。只需使用文件名 glob:

ls xyz*

您很可能希望通过管道传输文件名来处理它们?也许像这样?

ls xyz* | some other commands

在这种情况下,最好使用 for 循环。

for filename in xyz*
do
  some other commands "$filename"
done

请注意,在第一个变量中,文件名将作为流发送到 stdin,some other commands而在 for 循环中,文件名将作为命令行参数逐一出现some other command

答案3

ls | awk '/^xyz/'

您原来的解决方案只是在 regep 中缺少了^,它将匹配项锚定到行首。您不需要块,print因为找到匹配项时的默认操作是打印该行。如果您想明确说明,您可以这样写:

ls | awk '/^xyz/ {print $0}'

如果文件名包含空格,则应使用$0而不是(尽管如果文件名包含换行符,这仍会将其视为多个名称)。$1

相关内容