gpt4 book ai didi

linux - 如何显示多个文件的第三行

转载 作者:IT王子 更新时间:2023-10-29 01:04:32 25 4
gpt4 key购买 nike

我有一个简单的问题。我正在尝试检查文件夹中多个文件的第 3 行,所以我使用了这个:

head -n 3 MiseqData/result2012/12* | tail -n 1

但这显然不起作用,因为它只显示了最后一个文件的第三行。但我实际上想要 result2012 文件夹中每个文件的最后一行。

有人知道怎么做吗?

还有一个问题很抱歉,是否也可以显示特定第三行属于哪个文件?

像第三行显示之前一样,是否也可以显示从中提取的第三行的每一行的文件名?

因为如果我使用 head 或 tail 命令,也会显示文件名。

谢谢

最佳答案

在 Awk 中,变量 FNR 是当前文件中“记录”(默认行)的编号,因此您可以简单地将它与 3 进行比较打印每个输入文件的第三行:

awk 'FNR == 3' MiseqData/result2012/12*

针对长文件的更优化版本会在匹配时跳到下一个文件,因为您知道只有一行条件为真:

awk 'FNR == 3 { print; nextfile }' MiseqData/result2012/12*

然而,并不是所有的 Awk 都支持 nextfile(但它也不是 GNU Awk 独有的)。

使用您的 headtail 解决方案的更便携的变体将是 shell 中的循环:

for f in MiseqData/result2012/12*; do head -n 3 "$f" | tail -n 1; done

或者使用 sed(没有 GNU 扩展,即 -s 参数):

for f in MiseqData/result2012/12*; do sed '3q;d' "$f"; done

edit:关于如何打印每个文件的名称的附加问题,您需要自己为每个文件显式打印它,例如

awk 'FNR == 3 { print FILENAME ": " $0; nextfile }' MiseqData/result2012/12*

for f in MiseqData/result2012/12*; do
echo -n `basename "$f"`': '
head -n 3 "$f" | tail -n 1
done

for f in MiseqData/result2012/12*; do
echo -n "$f: "
sed '3q;d' "$f"
done

关于linux - 如何显示多个文件的第三行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57483215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com