Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
File 查找文件名,然后将路径/文件名以及文件中的特定行打印到输出文件中_File_Path_Filenames_Lines - Fatal编程技术网

File 查找文件名,然后将路径/文件名以及文件中的特定行打印到输出文件中

File 查找文件名,然后将路径/文件名以及文件中的特定行打印到输出文件中,file,path,filenames,lines,File,Path,Filenames,Lines,我马上就要解决这个问题了,但我似乎遇到了麻烦。我想搜索文件名,获取第14到17行的内容,然后将/path/filename打印到输出文件,然后将第14到17行的内容连接到同一行,用空格分隔 因此,在包含以下内容的目录中: /path1/filenameX.txt line 14: 3 line 15: 4 line 16: 9 line 17: 5 及 我希望输出文件如下所示: ./path1/filenameX.txt 3 4 9 5 ./path2/filenameY.txt 56 10

我马上就要解决这个问题了,但我似乎遇到了麻烦。我想搜索文件名,获取第14到17行的内容,然后将/path/filename打印到输出文件,然后将第14到17行的内容连接到同一行,用空格分隔

因此,在包含以下内容的目录中:

/path1/filenameX.txt
line 14: 3
line 15: 4
line 16: 9
line 17: 5

我希望输出文件如下所示:

./path1/filenameX.txt 3 4 9 5
./path2/filenameY.txt 56 10 70 89
我一直在寻找这个问题的解决方案,到目前为止(主要是由于这个网站!)我已经解决了其中的各个部分,但要让它们一起工作是非常困难的

下面是一个不太有效的解决方案示例:

find . -name 'filename*' -print0 -exec cat {} \; | head -n 17 | tail -n 4 | tr '\n' ' ' > output.txt
当其他尝试获取输出文件中包含的filname而不是行的内容时,上面的这一次获取了中的行的内容,但不是文件名,而且最近的一次仅读取一个文件


sed、grep、awk、cat或其他任何组合都可以在命令行上工作,如果有任何帮助,我们将不胜感激

以下内容应分别适用于每个示例

 awk 'BEGIN{printf "%s ", "."ARGV[1]} NR <=17 && NR >=14 {printf "%s",$3 } END{print x}' /path1/filenameX.txt`
awk'BEGIN{printf“%s”,“ARGV[1]}NR=14{printf“%s”,“$3}END{print x}'/path1/filenameX.txt`
还有Tiago的while循环

find . -name 'filename*' | while IFS= read -r line ; do  awk 'BEGIN{printf "%s\t", ARGV[1]} NR <=17 && NR >=14 {printf "%s ", $3 } END{print x}' $line ; done 
find-命名为“filename*”|而IFS=read-r行;doawk'BEGIN{printf“%s\t”,ARGV[1]}NR=14{printf“%s”,$3}END{print x}'$行;完成
试试这个:

root@dell:/tmp# find . -name 'filename*' | while IFS= read -r line; do  echo -n "$line "; sed -nre '14,17p' $line | tr '\n' ' '; echo   ; done
./path1/filenameX.txt 3 4 9 5 
./path2/filenameY.txt 56 10 70 89 

感谢您的回复,但我确实需要使用脚本在目录中搜索与“filename*”匹配的文件,而不是分别为每个文件运行单独的脚本,这主要是因为目录和子目录中有数百个文件。哦,我明白了……您可以使用Tiago的while循环和上面的awk one行文。我已经修改了答案。非常感谢!!最初,这给了我“sed:非法选项--r”。因此,我没有使用“sed-nre”,而是使用了“sed-ne”,它工作得非常好。再次感谢!
root@dell:/tmp# find . -name 'filename*' | while IFS= read -r line; do  echo -n "$line "; sed -nre '14,17p' $line | tr '\n' ' '; echo   ; done
./path1/filenameX.txt 3 4 9 5 
./path2/filenameY.txt 56 10 70 89