使用 find 命令从子文件夹中的文本文件中提取行

使用 find 命令从子文件夹中的文本文件中提取行

input.txt我在名为 的一百个子文件夹中的每个子文件夹中都有文本文件sample_1, ..., sample_100

input.txt我可以使用以下命令提取所有文件的第一行:

find -name input.txt -exec awk 'FNR == 1 {print $0}' > out.txt {} \;

但这会将所有内容的第一行打印input.txt到当前目录中的一个out.txt文件中。

我想要的是在每个子文件夹中,该特定子文件夹中out.txt的第一行。input.txt例如,out.txt内部sample_57子文件夹的第一行为input.txtin sample_57

关于如何完成这件事的任何想法。

答案1

使用head而不是awk.另外,使用-execdir而不是-exec使要执行的命令更易于阅读。

find -type f -name input.txt -execdir sh -c 'head -1 input.txt > out.txt' \;

答案2

out.txt在每个子文件夹中,第一行为input.txt该特定子文件夹中的

find+sed解决方案:

find . -type f -name input.txt -exec sh -c 'out_fn="${1%/*}/out.txt"; sed -n "1p" "{}" > "$out_fn"' _ {} \;
  • out_fn="${1%/*}/out.txt"- 路径输出文件名格式上/path/to/subfolder/out.txt

  • sed -n "1p" "{}"- 从输入文件中提取第一行{}

答案3

做就是了

find . -type f -name "input.txt" -execdir awk 'NR==1{print $0>"out.txt"}' '{}' +

或者您可以使用exit处理程序,它会在打印第一行后退出,并且当您只想打印第一行而不需要awk处理整个文件直到文件末尾时更好。

find . -type f -execdir awk '{print $0>"out.txt";exit}' '{}' +

相关内容