File 新文件中每个文件的第一行
如何获取目录中每个文件的第一行并将其全部保存在新文件中File 新文件中每个文件的第一行,file,bash,shell,scripting,line,File,Bash,Shell,Scripting,Line,如何获取目录中每个文件的第一行并将其全部保存在新文件中 #!/bin/bash rm FIRSTLINE for file in "$(find $1 -type f)"; do head -1 $file >> FIRSTLINE done cat FIRSTLINE 这是我的bash脚本,但当我这样做并打开第一行文件时, 然后我看到: ==> 'path of the file' <== 'first line' of the file ==>“文件的路径” 可
#!/bin/bash
rm FIRSTLINE
for file in "$(find $1 -type f)";
do
head -1 $file >> FIRSTLINE
done
cat FIRSTLINE
这是我的bash脚本,但当我这样做并打开第一行文件时,
然后我看到:
==> 'path of the file' <==
'first line' of the file
==>“文件的路径”
可能对你有用
可能对您有用。问题是您引用了find
的输出,因此它被视为一个字符串,因此for
循环只运行一次,只有一个参数包含所有文件。这意味着您运行head-1file1file2file3file4…
等。当给定多个文件head
打印==>file1时,问题是您引用了find
的输出,因此它被视为单个字符串,因此for
循环只运行一次,使用包含所有文件的单个参数。这意味着您运行head-1file1file2file3file4…
等,当给定多个文件时head
为gzip文件的实例打印==>file1:
for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt
对于实例的gzip文件:
for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt
+一个彻底的解释。还可以看到Zsolt的一行代码,它提供了一个通用、简洁、流行的替代方案。我非常不喜欢find
的-exec
选项,xargs
不需要\{}代码>噪波,在某些情况下效率更高,因为它不需要为每个文件派生一个新的进程(但在使用xargs-L1
时,它确实需要)+1进行彻底的解释。还可以看到Zsolt的一行代码,它提供了一个通用、简洁、流行的替代方案。我非常不喜欢find
的-exec
选项,xargs
不需要\{}代码>噪波,在某些情况下效率更高,因为它不需要为每个文件派生一个新的进程(但当使用xargs-L1
时,它确实需要这样做)绝对是最好的答案。这还递归地获取子目录中的所有文件。如果您只需要当前目录中的文件(非递归),还可以使用更快的head-qn1*2>/dev/null>YOURFILE
。转义{
不是必需的。我不确定对于每个find
version@williampersell…是否都是这样,但是转义并没有什么坏处。它与find
无关。字符串的这部分由shell解析。肯定是最好的答案。这也会递归地获取子目录中的所有文件。如果您只想在您当前目录中的文件(非递归)中,您还可以使用更快的head-qn1*2>/dev/null>YOURFILE
。转义{
不是必需的。我不确定对于每个find
version@williampersell…是否都是这样,但是转义没有什么坏处。它与find
无关。字符串的这部分由shell解析。
#!/bin/bash
for file in $(find $1 -type f)
do
head -1 $file
done
find $1 -type f | xargs -L1 head -1
find $1 -type f | xargs -L1 head -1 | tee FIRSTLINE
$ for file in $(find $1 -type f); do echo '';
echo $file;
head -n 4 $file;
done
for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt