我有一个非常大的文本文件。如果当前行最后有一个单词OR,我想将下一行合并到当前行。 例如。如下面的行
somerandomstring OR
someotherrandomstring
以上两行应该成为
somerandomstring OR someotherrandomstring
只有这些线条才能改变。其余的线条必须保持原样。提前谢谢。
请允许我进一步扩展这个问题。 我还想看看下一行是否以OR开头并且OR不在当前行的末尾,那么如何实现上述情况和这种情况一起?
答案 0 :(得分:1)
使用GNU sed:
public function getSpieler()
{
$spielID = Input::get('spielID');
$spielerOutput = Spieler::where('spielPlanID', '=', $spielID)->get();
return Response::json($spielerOutput);
}
在行尾(sed '/ OR$/{N;s/\n/ /}' file
)搜索空格后跟OR
,如果找到,则读取下一行($
)以模式空间并替换模式空间中的换行符(使用{ {1}})一个空格。
如果你想编辑你的文件"就地"使用sed的选项N
。
答案 1 :(得分:0)
您可以在awk
中执行此操作,方法是将“OR”行分配给变量,并在找不到“OR”时打印存储在变量中的内容。
awk '$NF=="OR"{buffer=buffer$0" "} $NF!="OR"{print buffer$0;buffer=""}' test.txt
这也适用于多行,通过将行连接到buffer
变量可能具有“OR”,直到找到非OR行,打印它并清除buffer
变量。
awk
中的另一个选项是在OR行上使用printf
,在非行或行上使用print
(这类似于@cyrus的GNU sed示例,但在awk)
awk '$NF=="OR"{printf "%s ", $0} $NF!="OR"{print $0}' test.txt
这是同一个野兽,但在printf
中使用三元运算符:
awk '{printf $NF=="OR"?"%s ":"%s\n", $0}' test.txt
答案 2 :(得分:0)
另一个awk
$2$ awk -v RS='^$' -v k='OR' '{gsub(k ORS,k FS); gsub(ORS k,FS k); printf "%s",$0}' file
x OR y
x OR y
用于测试输入文件
$ cat file
x OR
y
x
OR y