![通过命令行编辑和重新排列从 Excel 2003 导入的文件](https://linux22.com/image/1330290/%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%BC%96%E8%BE%91%E5%92%8C%E9%87%8D%E6%96%B0%E6%8E%92%E5%88%97%E4%BB%8E%20Excel%202003%20%E5%AF%BC%E5%85%A5%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有一个从 Excel 2003 导入的文本文件,其基本格式如下。
43038 12500 s.ramesh labour
43038 13000 m.ramesh doctor
我必须以这样的格式排列此文件,即第 1 列应为 1-5。
问题在于第 2、3 和 4 列没有按照特定顺序排列。
我希望这个文件的顺序是
- 整个文件的第 2 列应该位于第 15 至第 19 位
- 第 3 列应位于 49-65
- 第 4 列应位于第 75-95 位
该文件有 100000 行和 4 列。
我正在寻找有关 sort、vi 或任何其他编辑器或 shell 是否有用的建议,因为我每天必须对大约 100 个文件执行此操作。
答案1
像 Perl 这样的脚本语言非常适合这种情况。
$ cat t2
5 2 r.gritty teaboy
43038 12500 s.ramesh labour
43038 13000 m.ramesh doctor
$ perl -ane 'printf("%5s %5s\n", $F[2],$F[1])' t2
r.gritty 2
s.ramesh 12500
m.ramesh 13000
或者
$ perl -ane 'printf("%5s %0.5d\n", $F[2],$F[1])' t2
r.gritty 00002
s.ramesh 12500
m.ramesh 13000
然后一次性编辑数百个文件
$ perl -i -ane 'printf("%5s %5s\n", $F[2],$F[1])' t1 t2 t3 t4 t5 *.txt foo/t6