1

如何获取目录中每个文件的第一行并将它们全部保存在新文件中?

#!/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

这适用于我的论点中的所有文件。

有人有解决方案吗?

4

4 回答 4

5
find . -type f -exec head -1 \{\} \; > YOURFILE

可能对你有用。

于 2012-12-14T12:39:09.173 回答
3

问题是您引用了 的输出,find因此它被视为单个字符串,因此for循环仅运行一次,单个参数包含所有文件。这意味着您运行head -1 file1 file2 file3 file4 ...等,并且当给定多个文件时head打印==> file1 <==标题。

find因此,要修复它,请删除外壳周围的双引号,以确保您for按预期为每个文件运行一次循环。此外,脱壳后的分号是不必要的。

#!/bin/bash

rm FIRSTLINE
for file in $(find $1 -type f)
do
    head -1 $file >> FIRSTLINE
done
cat FIRSTLINE

不过,这有一些样式问题,您真的需要先写入文件然后再将cat文件写入标准输出吗?您可以将输出打印到标准输出:

#!/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
于 2012-12-14T12:53:04.177 回答
0

对于 gzip 文件实例:

for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt
于 2016-07-07T14:33:05.133 回答
0
$ for file in $(find $1 -type f); do echo ''; 
    echo $file; 
    head -n 4 $file; 
  done
于 2015-08-19T19:20:36.360 回答