用于更改文件间距的Bash或python

Ope*_*way 3 python bash

我有一组10000个文件.在所有这些中,第二行看起来像:

AAA 3.429 3.84
Run Code Online (Sandbox Code Playgroud)

所以AAA和其他两列之间只有一个空间(要求).每个文件上的其余行完全不同,对应10列数字.

随机地,大约20%的文件,并由于一些错误,一个得到

BBB  3.429 3.84
Run Code Online (Sandbox Code Playgroud)

所以现在第一列和第二列之间有两个空格.

这是一个很大的错误,所以我需要修复它,在发生错误的文件中从2变为1.

我想到的第一种方法是编写一个bash脚本,每个文件读取第二行的3个值,然后用一个空格打印它们,为所有文件执行.

我想知道oyu对这种方法的看法是什么,如果你能提出更好的建议,bashm python或其他方法.

谢谢

Isa*_*aac 8

对文本文件执行基于行的更改通常最简单sed.

sed -e '2s/  */ /g' infile.txt
Run Code Online (Sandbox Code Playgroud)

将用一个空格替换多个空格的任何运行.但是,这可能会比您想要的更改.

sed -e '2s/^\([^ ]*\)  /\1 /' infile.txt
Run Code Online (Sandbox Code Playgroud)

应该只用一个空格替换第一个无空格文本块后的两个空格的实例(虽然我没有测试过).

(编辑:在每个实例中插入2之前s将编辑绑定到第二行,具体而言.)


Jos*_*Lee 6

使用sed.

for file in *
do
  sed -i '' '2s/  / /' "$file"
done
Run Code Online (Sandbox Code Playgroud)

-i ''标志意味着在没有备份的情况下进行就地编辑.

或使用ed!

for file in *
do
  printf "2s/  / /\nwq\n" |ed -s "$file"
done
Run Code Online (Sandbox Code Playgroud)