我有一个像这样的文本文件:
abc 123 xyz
"abc
123" xyz
如果新行出现在带引号的字符串中,我想用空格('')替换新行。所以我想输出:
abc 123 xyz
abc 123 xyz
有没有办法在Unix中编写程序呢?
您可以打印新行,也可以仅打印一个空格,具体取决于"
到目前为止的行距。这样,如果我们将引号括起来,将仅打印新行。
$ 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
仅计算报价数量,因为split返回的数量比所需数量多一。gsub("\"","")
删除字符串中的双引号。printf "%s%s", $0, (val%2?" ":"\n")
将行与空格或换行一起打印。如果val
为2的倍数,则换行;否则为0。否则,空间。另一个例子:
$ 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句