Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在处理的每一行之后写入文件名_Bash_For Loop_Filenames - Fatal编程技术网

Bash 在处理的每一行之后写入文件名

Bash 在处理的每一行之后写入文件名,bash,for-loop,filenames,Bash,For Loop,Filenames,我编写了以下代码来处理多个文件中的每一行,并在行尾添加文件名: for i in $(cat all_output_file.txt);do cat $i|sed 's/:/ /g'|sed 's/-/ /g'| sed 's/,cn=/ /g'| awk 'BEGIN{OFS="\t"}{print $1,$2,$3,$6,FILENAME}'>>input_file.txt;done 但是,上面的代码在每行末尾打印“-”而不是文件名,如何在每行处理后的末尾打印文件名 这是因为a

我编写了以下代码来处理多个文件中的每一行,并在行尾添加文件名:

for i in $(cat all_output_file.txt);do cat $i|sed 's/:/ /g'|sed 's/-/ /g'| sed 's/,cn=/ /g'| awk 'BEGIN{OFS="\t"}{print $1,$2,$3,$6,FILENAME}'>>input_file.txt;done

但是,上面的代码在每行末尾打印“-”而不是文件名,如何在每行处理后的末尾打印文件名

这是因为awk是从
stdin
而不是从文件中读取的

已经说过,您可以在
awk
本身中完成所有这些:

while IFS= read -r line; do
    awk 'BEGIN{OFS="\t"}{gsub(/[:-]|,cn/, " "); print $1,$2,$3,$6, FILENAME}' "$line" 
done < all_output_file.txt >>input_file.txt

在BASH
$(这是因为
awk
正在读取
stdin
是的,我找到了答案,后来,我将处理过的行存储在一个变量中,并尝试使用“echo”打印文件名,但它也不起作用。跳过循环和多个awk分叉,只使用
awk'stuff'$(谢谢,它起作用了。现在我必须了解它是如何起作用的。再次感谢!
awk -v OFS='\t' '{gsub(/[:-]|,cn/, " ");
    print $1,$2,$3,$6, FILENAME}' $(<all_output_file.txt) >>input_file.txt