gpt4 book ai didi

bash - 使 cat 命令在目录中递归循环操作

转载 作者:行者123 更新时间:2023-11-29 09:39:38 26 4
gpt4 key购买 nike

我有一个很大的数据文件目录,我正在对这些文件进行操作以将其转换为所需的格式。它们每个都过早开始和结束 15 行,这意味着我需要从一个文件中删除前 15 行并将它们粘贴到序列中上一个文件的末尾。

首先,我编写了以下代码将相关数据分成简单的 block :

#!/bin/bash

destination='media/user/directory/'
for file1 in `ls $destination*.ascii`
do
echo $file1
file2="${file1}.end"
file3="${file1}.snip"
sed -e '16,$d' $file1 > $file2
sed -e '1,15d' $file1 > $file3
done

这非常有效,所以下一步是世界上最简单的 cat 命令:

cat $file3 $file2 > outfile

但是,我需要做的是将file2拼接到previousfile3Look at this screenshot的目录,以便更好地理解。

看看这些文件是如何随时间顺序排列的:

*_20090412T235945_20090413T235944_*    ### April 13
*_20090413T235945_20090414T235944_* ### April 14

所以我需要从上面的 April 14 示例中截取 15 行并将其粘贴到 April 13 示例的末尾。

这不一定是原始代码的一部分,事实上,如果不是,那可能是最好的。我只是希望有人能够帮助我实现这一目标。

提前致谢!如果有任何我不清楚的地方需要进一步解释,请告诉我。

最佳答案

"I need to strip the first 15 lines off one file and paste them to the end of the previous file in the sequence."

如果我理解正确的话,一行代码就可以搞定:

awk 'NR==1 || FNR==16{close(f); f=FILENAME ".new"} {print>f}' file1 file2 file3

运行后,文件 file1.new , file2.new , 和 file3.new将在新表格中转移行。当然,您不限于三个文件:您可以在命令行中指定任意多个文件。

例子

为了让我们的例子简短,我们只去掉前 2 行而不是 15 行。考虑这些测试文件:

$ cat file1
1
2
3
$ cat file2
4
5
6
7
8
$ cat file3
9
10
11
12
13
14
15

这是运行命令的结果:

$ awk 'NR==1 || FNR==3{close(f); f=FILENAME ".new"} {print>f}' file1 file2 file3
$ cat file1.new
1
2
3
4
5
$ cat file2.new
6
7
8
9
10
$ cat file3.new
11
12
13
14
15

如您所见,每个文件的前两行已转移到前面的文件中。

工作原理

awk 隐式逐行读取每个文件。我们代码的工作是根据行号选择一行应该写入哪个新文件。变量 f将包含我们正在写入的文件的名称。

  • NR==1 || FNR==16{f=FILENAME ".new"}

    当我们读取第一个文件的第一行时,NR==1 ,或者当我们读取我们所在文件的第 16 行时,FNR==16 , 我们更新 f成为当前文件的名称 .new添加到最后。

    对于传输 2 行而不是 15 行的简短示例,我们使用了相同的代码,但使用了 FNR==16。替换为 FNR==3 .

  • print>f

    这会将当前行打印到文件 f .

    (如果这是一个 shell 脚本,我们将使用 >> 。这不是一个 shell 脚本。这是 awk。)

使用 glob 指定文件名

destination='media/user/directory/'
awk 'NR==1 || FNR==16{close(f); f=FILENAME ".new"} {print>f}' "$destination"*.ascii

关于bash - 使 cat 命令在目录中递归循环操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39115297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com