Bash脚本扫描文件夹和删除每个文件中的零



我有一个包含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个文件,从第3行开始填充了37行零,我如何通过脚本删除它们?目录下所有文件的通用文件格式为regional_vol_GM_atlas*.txt

从第三行删除像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或多个0,由"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")

最新更新