打印子文件夹中所有文件的特定行

打印子文件夹中所有文件的特定行

我有一个文件夹,其中有多个子文件夹,每个子文件夹都有几个数字子文件夹。

├── child1
│   ├── 1
│   ├── 2
│   └── 3
├── child2
│   ├── 1
│   ├── 2
│   └── 3
└── child3
    ├── 1
    ├── 2
    └── 3

每个数字文件夹都有一个名为pos

我想打印pos每个文件夹中每个文件的第 100 行3

我可以使用以下命令列出文件夹:

find . -type d -name "3" -exec find {} -type f -name "pos" \;

我如何打印每个文件的第 100 行?输出应类似于:

./child1/3/pos: content of line 100
./child2/3/pos: content of line 100
./child3/3/pos: content of line 100

此致

答案1

使用sed它可以轻松打印所有文件的第 100 行,但我没有找到在sed该行前面加上文件名前缀的纯粹解决方案。

sed -ns 100p */3/pos

要打印文件名,可以使用 shell 循环。这将为sed每个文件创建一个单独的进程。

for i in */3/pos
do
    sed -n "100{s|^|$i: |;p}" "$i"
done

或者

for i in */3/pos
do
    echo "$i: $(sed -n 100p "$i")"
done

或者您也可以使用awk

awk 'FNR==100 { print FILENAME ": " $0 }' */3/pos

答案2

将其附加到您的“查找”中:
...| while read f ; do echo "$f: $(tail -n +100 ""$f"" | head -n 1 )" ; done

已测试

这是一般的 Bash 代码;有关详细信息,请参阅“Bash 指南”www.tldp.org- 只需浏览就会告诉你很多信息 - 这些都是旧的,但仍然包含非常有效的信息。

相关内容