连接每个文件没有最后一行的文件
Concatenate files without last lines of each one
我正在使用以下命令将大量文件连接成一个文件:
$ cat num_*.dat > dataset.dat
但是,由于文件的结构,我想省略连接每个文件的前两行和最后两行。这些行包含对我的需求不重要的文件信息。
我知道 head
和 tail
的存在,但我现在不知道如何将它们组合在 UNIX 指令中来解决我的问题。
head 命令有一些奇怪的参数用法。
您可以使用以下命令列出除最后两行之外的所有行。
$ cat num_*.dat | head -n-2 > dataset.dat
下一步,运行 执行下面的 tail 命令
$ tail dataset.dat -n+3 >> dataset.dat
我相信以下命令可以作为一个命令使用。
$ cat num_*.dat | head -n-2 | tail -n+3 > dataset.dat
我在一个包含如下行的文件上进行了测试:
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line
7
这篇文章将帮助您入门:
cat test.txt | head -n-2 | tail -n+3
从上面的文件打印:
Line 3
Line 4
Line 5
挑战在于,当您使用 cat filename*.dat 或任何命令对所有文件进行 cat 时,然后 运行s 命令一次,这样它就变成了一个大文件,只删除了第一个文件第一个 catt 文件的两行和最后一个 catt 文件的两行。
最终答案 - 需要编写 Bash 脚本
我写了一个 bash 脚本来为您做这件事。
这将遍历目录中的每个文件和 运行 命令。
请注意,它将 (>>) 附加到 dataset.dat 文件。
for file in num_*.dat; do
if [ -f "$file" ]; then
cat $file | head -n-2 | tail -n+3 >> dataset.dat
echo "$file"
fi
done
我有两个文件如下所示:
line 1
line 2
line 3
line 4
line 5
line 6
line
7
2 line 1
2 line 2
2 line 3
2 line 4
2 line 5
2 line 6
2 line 7
最终输出为:
line 3
line 4
line 5
2 line 3
2 line 4
2 line
5
for i in num_*.dat; do # loop through all files concerned
cat $i | tail -n +3 | head -n -2 >> dataset.dat
done
我正在使用以下命令将大量文件连接成一个文件:
$ cat num_*.dat > dataset.dat
但是,由于文件的结构,我想省略连接每个文件的前两行和最后两行。这些行包含对我的需求不重要的文件信息。
我知道 head
和 tail
的存在,但我现在不知道如何将它们组合在 UNIX 指令中来解决我的问题。
head 命令有一些奇怪的参数用法。
您可以使用以下命令列出除最后两行之外的所有行。
$ cat num_*.dat | head -n-2 > dataset.dat
下一步,运行 执行下面的 tail 命令
$ tail dataset.dat -n+3 >> dataset.dat
我相信以下命令可以作为一个命令使用。
$ cat num_*.dat | head -n-2 | tail -n+3 > dataset.dat
我在一个包含如下行的文件上进行了测试:
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
这篇文章将帮助您入门:
cat test.txt | head -n-2 | tail -n+3
从上面的文件打印:
Line 3
Line 4
Line 5
挑战在于,当您使用 cat filename*.dat 或任何命令对所有文件进行 cat 时,然后 运行s 命令一次,这样它就变成了一个大文件,只删除了第一个文件第一个 catt 文件的两行和最后一个 catt 文件的两行。
最终答案 - 需要编写 Bash 脚本
我写了一个 bash 脚本来为您做这件事。 这将遍历目录中的每个文件和 运行 命令。 请注意,它将 (>>) 附加到 dataset.dat 文件。
for file in num_*.dat; do
if [ -f "$file" ]; then
cat $file | head -n-2 | tail -n+3 >> dataset.dat
echo "$file"
fi
done
我有两个文件如下所示:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
2 line 1
2 line 2
2 line 3
2 line 4
2 line 5
2 line 6
2 line 7
最终输出为:
line 3
line 4
line 5
2 line 3
2 line 4
2 line 5
for i in num_*.dat; do # loop through all files concerned
cat $i | tail -n +3 | head -n -2 >> dataset.dat
done