2011-04-19 56 views
0

我的数据文件应该是在400行的标签行结尾行结尾。不幸的是,许多行上出现了一些随机的EOL。Bash脚本删除偶尔的字符和eols

我会很感激有关如何处理该文件删除随机EOLS(但在每行结束后离开“真正的” EOL提示。

非常感谢!

+0

我认为你应该更具体一点; “由400个标签分隔”使得听起来好像每个列之间应该有400个标签:我认为这不是你的意思。每行400个制表符分隔的列,并且一些行错误地缩短了? – unwind 2011-04-19 18:02:58

回答

0

你可以使用像TR做你想要什么,例如:

[[email protected] dmc]# echo -e "\na\nbcd" 

a 
bcd 
[[email protected] dmc]# echo -e "\na\nbcd" | tr -d '\n' 
abcd[[email protected] dmc]# 

那么所有你需要做的是在\ n在你行的末尾加那么它在正确的位置

的EOL
+0

这会删除最后一个换行符。 – drysdam 2011-04-19 18:12:56

+0

感谢大家的建议 - 非常感谢! – Tanuojin 2011-04-20 07:22:41

0

你可以使用grep来做到这一点,但你必须经过一些工作才能将TAB字符加入其中。我所做的只是现在是创造一个看起来像这样的模式文件:

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

其中那些大的白色空间是实际的标签(我用emacs的,做了(什么光标位置),以确保)。

此特定模式查找“字段”为“零个或多个非制表符分隔符后跟制表符分隔符”的3个或更多字段。实际上,你想坏线,使扭转的grep:

grep -vf <patternfile> <datafile> 

现在遍历这些行并应用tr -d '\n'每个。用新的换行符回显结果,就完成了。 (我把这个完全放在一个脚本中,但我有时间限制,我不知道你的文件看起来像什么。)

+0

你可以通过'^ v '(ctrl + v,tab键)获得一个标签 – Daenyth 2011-04-19 19:25:18

+0

是的,我在阅读时尝试这样做。但它并不适合我。 – drysdam 2011-04-19 21:21:53