我有一个如下文件
"IN001~24Apr16~Hi,
what a way?
oh no!~
not here~"
"IN003~29Apr16~
what a way?
~oh no!
say again.
not again~"
我想要以下格式的输出
"IN001~24Apr16~Hi,what a way?oh no!~not here~"
"IN003~29Apr16~what a way?~oh no!say again.not again~"
任何使用 awk 或 sed 的解决方案都非常受欢迎。
答案1
awk '{ printf "%s",$0 }; /"$/ { print ""; };' inputfile
仅当输入行以双引号结尾时,输出中才会有换行符。因此,此awk
代码输出所有输入行,不带换行符。之后,它检查输入行是否以 a 结尾"
,如果是,则输出换行符。
答案2
$ sed -n -e '/^"/{h;n;}' -e H -e '/"$/{g;s/\n//g;p;}' file
"IN001~24Apr16~Hi,what a way?oh no!~not here~"
"IN003~29Apr16~what a way?~oh no!say again.not again~"
该sed
命令将...
/^"/{h;n;}
:将所有以 开头的行复制"
到保留空间 (h
),覆盖其中的所有内容,然后立即移至下一行输入 (n
)。H
:其他行附加到保留空间。/"$/{g;s/\n//g;p;}
:如果一行以 结尾"
,则将获取保留空间 (g
) 并从中删除换行符(在将行追加到保留空间时添加这些换行符),并打印结果字符串。
命令行可以压缩一下:
$ sed -n '/^"/{h;n;};H;/"$/{g;s/\n//g;p;}' file