我有一个像这样的文本文件:
abc 123 xyz
"abc
123" xyz
如果新行出现在带引号的字符串中,我想用空格替换新行('')。所以我想要输出:
abc 123 xyz
abc 123 xyz
有没有办法在Unix中为此编写程序?
答案 0 :(得分:0)
您可以打印一个新行或只是一个空格,具体取决于到目前为止"
到目前为止的数量。这样,如果我们关闭报价,就会打印新行。
$ awk '{n=split($0,a,"\""); val+=(n-1); gsub("\"",""); printf "%s%s", $0, (val%2?" ":"\n")}' file
abc 123 xyz
abc 123 xyz
n=split($0,a,"\"")
计算当前行中出现的"
个。由于split()
会根据"
作为分隔符返回多少件,至少我们会得到1
的值。val+=(n-1)
跟踪余额。 -1
只计算引号数,因为拆分返回的数量超过了所需数量。gsub("\"","")
删除字符串中的双引号。printf "%s%s", $0, (val%2?" ":"\n")
将该行与空格或新行一起打印出来。如果val
是2的倍数,则为新行;否则,空间。另一个例子:
$ cat a
abc 123 xyz
"abc
hee
123" xyz
and "this
is not everything"
$ awk '{n=split($0,a,"\""); val+=(n-1); gsub("\"",""); printf "%s%s", $0, (val%2?" ":"\n")}' a
abc 123 xyz
abc hee 123 xyz
and this is not everything