我有一组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或其他方法.
谢谢
对文本文件执行基于行的更改通常最简单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将编辑绑定到第二行,具体而言.)
使用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)
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |