找到文件名,然后将路径/文件名加上文件中的特定行打印到输出文件

时间:2014-05-19 15:08:45

标签: 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

/path2/filenameY.txt
line 14: 56
line 15: 10
line 16: 70
line 17: 89

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

./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或其他任何可以在命令行上运行的组合都可以,任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

 awk 'BEGIN{printf "%s ", "."ARGV[1]} NR <=17 && 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 

答案 1 :(得分:0)

试试这个:

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