我有一个文件夹,其中有多个子文件夹,每个子文件夹都有几个数字子文件夹。
├── 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- 只需浏览就会告诉你很多信息 - 这些都是旧的,但仍然包含非常有效的信息。