我有一个文本文件,如果后面跟着字符串" fox"
我需要删除换行符the
brown
fox
jumps
将成为
the
brown fox
jumps
我想在SED中这样做,但AWK解决方案也很有用。
答案 0 :(得分:2)
使用Perl:
from pyspark.sql.functions import col, get_json_object
dfRates.toDF(["id", "json_string"]).select(
# This assumes you expect userId field
get_json_object(col("json_string"), "$.userId"),
...
)
输出:
the brown fox jumps
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed ':a;N;/\nfox/s/\n//;ta;P;D' file
在模式空间中读取两行,如果第二行符合条件,则删除换行符并重复。始终打印第一行然后删除。如果模式空间中仍然有一条线,即标准不匹配,则附加另一条线等,但是如果线符合条件,则模式空间为空,并且将读入两条线,如同在文件的开头。
答案 2 :(得分:2)
这不是sed的工作,它是awk的工作:
$ awk 'NR>1{printf "%s", (/fox/ ? OFS : ORS)} {printf "%s", $0} END{print ""}' file
the
brown fox
jumps
上面用空白字符(OFS)替换狐狸之前的换行符(ORS)。按摩适合...
使用GNU awk,您可以将其减少为:
$ awk -v RS='^$' -v ORS= '{gsub(/\nfox/," fox")} 1' file
the
brown fox
jumps
或:
$ awk -v RS='\nfox' '{ORS=gensub(/\n/," ",1,RT)} 1' file
the
brown fox
jumps
但是它一次将整个文件读入内存。