0

我有一个包含 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

4

1 回答 1

1

从第三行中删除行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”更改)

警告:这是“就地”。在尝试此操作之前进行备份。它不计算有多少列。如果这是一个问题,那么awk应该使用。

(像这样进行测试sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' one_of_your_files.txt:)

递归情况:如果文件位于多个子目录中,则适用sedfind命令的结果:

sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' $(find subdir_root -type f -name "regional*.txt")
于 2016-09-13T08:23:58.953 回答