如何获取目录中每个文件的第一行并将它们全部保存在新文件中?
#!/bin/bash
rm FIRSTLINE
for file in "$(find $1 -type f)";
do
head -1 $file >> FIRSTLINE
done
cat FIRSTLINE
这是我的bash脚本,但是当我这样做并打开文件FIRSTLINE时, 然后我看到了这个:
==> 'path of the file' <==
'first line' of the file
和我参数中的所有文件。
有人有解决方案吗?
答案 0 :(得分:5)
find . -type f -exec head -1 \{\} \; > YOURFILE
可能适合你。
答案 1 :(得分:3)
问题是你引用了find
的输出,所以它被视为一个字符串,所以for
循环只运行一次,只有一个参数包含所有文件。这意味着您运行head -1 file1 file2 file3 file4 ...
等,当给定多个文件head
时,会打印==> file1 <==
标题。
所以要修复它,删除find
shell-out周围的双引号,这样可以确保按照预期为每个文件运行一次for
循环。此外,在shell-out之后的分号是不必要的。
#!/bin/bash
rm FIRSTLINE
for file in $(find $1 -type f)
do
head -1 $file >> FIRSTLINE
done
cat FIRSTLINE
这有一些样式问题,你真的需要写一个文件然后cat
文件到stdout吗?您可以将输出打印到stdout:
#!/bin/bash
for file in $(find $1 -type f)
do
head -1 $file
done
就我个人而言,我会这样写:
find $1 -type f | xargs -L1 head -1
或者如果你需要文件中的输出并打印到stdout:
find $1 -type f | xargs -L1 head -1 | tee FIRSTLINE
答案 2 :(得分:0)
$ for file in $(find $1 -type f); do echo '';
echo $file;
head -n 4 $file;
done
答案 3 :(得分:0)
用于实例的gzip文件:
for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt