Bash 用于扫描文件夹并删除每个文件中的零的脚本
Bash script to scan through folder and and delete zeros in each file
我有一个包含 68 个文件(.txt 文件)的文件夹,其中 38 个文件从第四行开始到第三列结束为零。
我想使用 bash 脚本从文件中删除所有零。
.txt 文件采用以下格式(我附上了我目录中前三个文件的图片),您可以看到每个文件都添加了一个新行,其中添加了额外数量的零。
下面列出了几个文件示例
regional_vol_GM_atlas1.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
regional_vol_GM_atlas2.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
9020 9020.000000
11065 11065.000000
regional_vol_GM_atlas3.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
0 0.000000
11651 11651.000000
regional_vol_GM_atlas3.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
0 0.000000
0 0.000000
12706 12706.000000
对于第 38 个文件,从第三行开始填充了 37 行零,如何通过脚本删除它们?目录下所有文件的通用文件格式为regional_vol_GM_atlas*.txt
从第 3 行删除像 0 0.0000
这样的行和最后一个字段的尾随零(和点),如下所示:
sed -i -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' regional*txt
之前:
4536 23452345.0000
0 0.0000
之后:
4536 23452345
(点+行尾1个或多个零,由"nothing"改变)
警告:这是 "in-place"。在尝试此操作之前进行备份。它不计算那里有多少列。如果这是一个问题,那么应该使用 awk
。
(像这样进行非原地测试:sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' one_of_your_files.txt
)
递归情况:如果文件在多个子目录中,则对 find
命令的结果应用 sed
:
sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' $(find subdir_root -type f -name "regional*.txt")
我有一个包含 68 个文件(.txt 文件)的文件夹,其中 38 个文件从第四行开始到第三列结束为零。
我想使用 bash 脚本从文件中删除所有零。
.txt 文件采用以下格式(我附上了我目录中前三个文件的图片),您可以看到每个文件都添加了一个新行,其中添加了额外数量的零。
下面列出了几个文件示例
regional_vol_GM_atlas1.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
regional_vol_GM_atlas2.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
9020 9020.000000
11065 11065.000000
regional_vol_GM_atlas3.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
0 0.000000
11651 11651.000000
regional_vol_GM_atlas3.txt
667869 667869.000000
580083 580083.000000
316133 316133.000000
0 0.000000
0 0.000000
0 0.000000
12706 12706.000000
对于第 38 个文件,从第三行开始填充了 37 行零,如何通过脚本删除它们?目录下所有文件的通用文件格式为regional_vol_GM_atlas*.txt
从第 3 行删除像 0 0.0000
这样的行和最后一个字段的尾随零(和点),如下所示:
sed -i -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' regional*txt
之前:
4536 23452345.0000
0 0.0000
之后:
4536 23452345
(点+行尾1个或多个零,由"nothing"改变)
警告:这是 "in-place"。在尝试此操作之前进行备份。它不计算那里有多少列。如果这是一个问题,那么应该使用 awk
。
(像这样进行非原地测试:sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' one_of_your_files.txt
)
递归情况:如果文件在多个子目录中,则对 find
命令的结果应用 sed
:
sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' $(find subdir_root -type f -name "regional*.txt")