For loop 使用awk打印';第n个和第x27个;for i循环中的字段数

For loop 使用awk打印';第n个和第x27个;for i循环中的字段数,for-loop,awk,For Loop,Awk,我编写了一个单行程序来搜索一个文件,该文件是针对文件夹中某些文件的字符串列表 其思想是创建一个新的输出,列出搜索的字符串,然后是在其中找到它的所有文件 文件列表包含以下内容 alexl-lap:projects alexl$ cat list abc-123 def-456 这就是我到目前为止所做的: alexl-lap:projects alexl$ for i in `cat list` ; do printf "\n$i:\n" ; grep -l --color=always $i

我编写了一个单行程序来搜索一个文件,该文件是针对文件夹中某些文件的字符串列表

其思想是创建一个新的输出,列出搜索的字符串,然后是在其中找到它的所有文件

文件列表包含以下内容

alexl-lap:projects alexl$ cat list
abc-123
def-456
这就是我到目前为止所做的:

alexl-lap:projects alexl$ for i in `cat list` ; do printf "\n$i:\n" ;  grep -l --color=always $i * | /usr/bin/awk '{printf("%s\n", $0)}' ; done >> log.txt

alexl-lap:projects alexl$ cat log.txt

abc-123:
file1.txt
file2.txt
file3.txt

def-456:
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
如果我现在运行下面的命令,这就是我得到的

alexl-lap:projects alexl$ /usr/bin/awk 'BEGIN{RS="";FS="\n"} {print $1 " " $2 "" $3 "" $4 "" $5 " "}' < log.txt
abc-123: file1.txt file2.txt file3.txt
def-456: file1.txt file2.txt file3.txt file4.txt file5.txt
alexl-lap:projects-alexl$/usr/bin/awk'BEGIN{RS=“;FS=“\n”}{print$1”“$2”“$3”“$4”“$5”“}
使用手动指定字段显然是一种糟糕的做法。如果在15个文件中找到正在搜索的字符串,我需要包含1-15个

如何使用“n”变量实现这一点

我想要相同的输出,但awk会查看在其中找到文件的文件数,并在搜索的字符串后打印所有文件(在一行中)


谢谢

此解决方案假定所有
文件*txt
文件名不包含特殊字符,也不包含

试一试:

grep -Hf list *txt | awk 'BEGIN {FS=":"} {string=substr($0,length($1)+2); if (!filenames[string]) {filenames[string]=$1;} else {filenames[string]=sprintf("%s %s",filenames[string],$1);}} END {for (string in filenames) { print string ":" filenames[string]; }}'

def-456:file1.txt file2.txt file3.txt file4.txt file5.txt
abc-123:file1.txt file2.txt file3.txt

此解决方案假定所有
文件*txt
文件名不包含特殊字符,也不包含

试一试:

grep -Hf list *txt | awk 'BEGIN {FS=":"} {string=substr($0,length($1)+2); if (!filenames[string]) {filenames[string]=$1;} else {filenames[string]=sprintf("%s %s",filenames[string],$1);}} END {for (string in filenames) { print string ":" filenames[string]; }}'

def-456:file1.txt file2.txt file3.txt file4.txt file5.txt
abc-123:file1.txt file2.txt file3.txt

嗯,这里似乎采取了很多不必要的步骤-你能不能把你的问题解释清楚,给我们看一个输入和输出的样本?嗯,这里似乎采取了很多不必要的步骤-你能不能把你的问题解释清楚,给我们看一个输入和输出的样本?