我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.txt到out.txt当前目录中的一个文件中。
我想要的是out.txt在每个子文件夹中input.txt,该特定子文件夹中的第一行。例如,out.txtinsidesample_57子文件夹将具有input.txtin 的第一行sample_57。
关于如何完成这项工作的任何想法。
使用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)
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" "{}" - 从输入文件中提取第一行 {}