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

fla*_*ngs 3 find awk

input.txt在一百个名为sample_1, ..., sample_100.

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

find -name input.txt -exec awk 'FNR == 1 {print $0}' > out.txt {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

关于如何完成这项工作的任何想法。

ces*_*arv 7

使用head代替awk。此外,使用-execdir而不是-exec使执行的命令更易于阅读。

find -type f -name input.txt -execdir sh -c 'head -1 input.txt > out.txt' \;
Run Code Online (Sandbox Code Playgroud)


Rom*_*est 5

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"' _ {} \;
Run Code Online (Sandbox Code Playgroud)
  • out_fn="${1%/*}/out.txt"- 以格式输出文件名的路径/path/to/subfolder/out.txt

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