macOS终端CLI练习问题:提取多文本文件第3行合并失败
提取多个文本文件的第3行并合并到结果文件的正确方法
你的原命令head -n 3 *.txt | tail -n 1 *.txt > results.txt逻辑错误:tail -n 1 *.txt并没有处理管道传来的内容,而是直接读取每个*.txt文件的最后一行,完全偏离了提取每个文件第3行的需求。
以下是几种可行的正确方案:
方法1:用awk(最简洁高效)
awk可以直接遍历文件,精准打印每个文件的第3行:
awk 'FNR == 3' *.txt > result.txt
FNR代表当前处理文件的行号,当行号等于3时,awk默认输出该行;- 自动遍历所有匹配
*.txt的文件,将每个文件的第3行写入result.txt。
方法2:bash循环+sed
如果更习惯基础命令组合,用循环逐个处理文件:
> result.txt # 先清空已存在的结果文件 for file in *.txt; do sed -n '3p' "$file" >> result.txt done
sed -n '3p'表示只打印文件的第3行;- 循环遍历每个txt文件,将第3行追加到结果文件中。
方法3:修正head+tail的组合(贴合你的初始思路)
如果坚持用head和tail,需要对每个文件单独处理:
> result.txt for file in *.txt; do head -n 3 "$file" | tail -n 1 >> result.txt done
- 对单个文件先取前3行,再取这3行的最后一行(即原文件第3行),再追加到结果文件。
内容的提问来源于stack exchange,提问作者w4llly
相关产品推荐
相关产品推荐

