我有一个虚线的文件,如下所示,
C12321 net12415431 net41432143 +
1.079879E-17
C12322 net2135 net648641 +
3.4659E-17
我想从这个文件创建一个文件,其中的行如下
C12321 net12415431 net41432143 1.079879E-17
C12322 net2135 net648641 3.4659E-17
我需要使用sed或awk在几行中完成此操作。
的问候, 阿西
答案 0 :(得分:1)
读取文件并删除所有出现的“+ \ n”(空格加新线):
$ cat file
C12321 net12415431 net41432143 +
1.079879E-17
C12322 net2135 net648641 +
3.4659E-17
$ awk -v RS= '{gsub(/ \+\n/,""); print}' file
C12321 net12415431 net41432143 1.079879E-17
C12322 net2135 net648641 3.4659E-17
有许多替代品,一些更简洁,一些使用更少的内存,等等。这只是最清晰的恕我直言。
答案 1 :(得分:0)
你可以这样做:
$ sed ':a;N;$!ba;s/+\n/ /g' your_file
它将替换所有+
后跟一个带空字符串的新行。
如果您希望使用此替换更新文件,请添加-i
参数:
$ sed -i ':a;N;$!ba;s/+\n/ /g' your_file
可以在https://stackoverflow.com/a/1252191/1983854:
中找到该命令的说明更新:解释。
- 通过
创建标签:a
- 通过
将当前和下一行附加到模式空间N
- 如果我们在最后一行之前,分支到创建的标签
$!ba
($!
表示不在最后一行执行此操作(因为应该有一个) 最后换行))。- 最后,替换用模式空间(即整个文件)上的空格替换每个换行符。
醇>
答案 2 :(得分:0)
单个sed
命令的更长但更易读的替代方法:
tr '+' '\\' < tmp.txt | while read line; do printf "%s\n" "$line"; done
这只是将+
替换为内置read
的shell理解的行继续符。
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed '$!N;s/ +\n//;P;D' file