Bash脚本删除偶尔的字符和eols

时间:2011-04-19 17:58:41

标签: bash

我的数据文件应该是由400个制表符分隔的行,末尾是行尾。不幸的是,许多行上出现了一些随机的eols。

我很感激有关如何处理文件以删除随机eols的提示(但在每行的末尾留下'真实'eol。

非常感谢!

2 个答案:

答案 0 :(得分:0)

你可以使用类似tr之类的东西来做你想做的事,例如:

[root@C1100-05 dmc]# echo -e "\na\nbcd"

a
bcd
[root@C1100-05 dmc]# echo -e "\na\nbcd" | tr -d '\n'
abcd[root@C1100-05 dmc]#

然后您需要做的就是添加行末尾的\ n,以便EOL位于正确的位置

答案 1 :(得分:0)

您可以使用grep执行此操作,但您必须完成一些工作才能将TAB字符添加到其中。我刚刚做的是创建一个如下所示的模式文件:

\([^    ]*      \)\{3,\}  

那些大的空白区域是实际的标签(我使用emacs并做了一个(光标位置)以确保)。

此特定模式查找3个或更多字段,其中“字段”为“零个或多个非制表符号后跟制表符分隔符”。你实际上想要坏线,所以反过来grep:

grep -vf <patternfile> <datafile>

现在迭代这些行并对每个行应用tr -d '\n'。使用 new 换行符回显结果,您就完成了。 (我将这完全放在一个脚本中,但我有时间限制,但我不知道你的文件是什么样的。)