我接近解决这个问题,但我似乎遇到了障碍。我想搜索文件名,抓取第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或其他任何可以在命令行上运行的组合都可以,任何帮助都将不胜感激!
答案 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