我是一个非常小且具体需求的新手。我正在使用awk解析一些东西,我需要从原始文本中的几个部分生成不间断的文本行。 但只要我使用分号,awk就会在输出中插入换行符。
我的意思最简单的例子:
原文:
1 2
awk命令:
{ print $1; print $2 }
输出将是:
1
2
问题是我需要输出为单行,我还需要使用分号,因为我必须对原始文本执行多个操作,而不是所有操作 print 。
另外,使用ORS =“”会导致很多不同的问题,所以它不是一个选项。
在没有新行插入的情况下,我可以在同一行中进行多项操作吗?
谢谢!
答案 0 :(得分:5)
输出中的换行符与您使用分号分隔脚本中的语句无关,它们是因为print
输出您给出的参数,后跟ORS
的内容和默认值ORS
的值是换行符。
您可能需要以下任何一种版本:
$ echo '1 2' | awk '{printf "%s ", $1; printf "%s ", $2; print ""}'
1 2
$
$ echo '1 2' | awk -v ORS=' ' '{print $1; print $2; print "\n"}'
1 2
$
$ echo '1 2' | awk -v ORS= '{print $1; print " "; print $2; print "\n"}'
1 2
$
但如果不了解更多关于你正在尝试做什么的话,很难说。
至少要仔细阅读Arnold Robbins编写的有效Awk编程第4版,以便在尝试使用awk编程之前了解基础知识,否则你将浪费大量时间并学到很多东西首先是坏习惯。
答案 1 :(得分:0)
如果使用printf
,例如
awk '{ printf "%s %s\n",$1,$2 }'
答案 2 :(得分:0)
awk '{print $1 $2}'
这种情况下的解决方案是
答案 3 :(得分:0)
您收到换行符是因为print
在每个print语句后将 OFS 发送到标准输出。您可以通过各种其他方式格式化输出,但关键是通常只调用单个print
或printf
语句,无论您要打印多少字段或值。
执行此操作的一种方法是使用逗号分隔参数,对print
使用一次调用。这将在打印的参数之间插入OFS。例如:
$ echo '1 2' | awk '{print $1, $2}'
1 2
如果您不希望输出中出现任何分隔,只需将所有参数传递给单个print
语句即可。例如:
$ echo '1 2' | awk '{print $1 $2}'
12
如果您想要更多控制,请使用printf
格式化字符串。例如:
$ echo '1 2' | awk '{printf "%s...%s\n", $1, $2}'
1...2
答案 4 :(得分:0)
$ echo "1 2" | awk '{print $1 " " $2}'
1 2