0

我有一个文件:

AA
BB

此命令打印出:

$ awk 'BEGIN { system("awk '"'"'{print}'"'"' file") }'

AA
BB

相同,但在“printf”中:

$ awk 'BEGIN { system("awk '"'"'{printf "%s ", $0}'"'"' file") }'

/bin/sh: Illegal option -,

如何改进最后一条命令以获得结果:

AA BB

感谢您的帮助。

4

4 回答 4

2

希望您的问题只是出于好奇。毫无疑问,有更好的方法来完成您可能尝试做的任何事情,如果不是的话。

您可以使用变量来表示引号,而不是尝试使用复杂的单引号和双引号序列(如果它们没有正确配对可能会产生奇怪的副作用)。通过本质上是三级引用,它使代码更易于阅读。下面的技术有点类似于 Perl 的q()引用。

将变量设置q为单引号的八进制等效项,然后您可以执行以下操作:

awk 'BEGIN{q = "\047"; system("awk " q "{print}" q " file")}'

间距由您决定 - 每个字符串段都连接到其相邻段。

这是您可能会发现更具可读性的另一种方式:

awk 'BEGIN{q = "\047"; system("awk " q"{print}"q " file")}'
于 2012-04-23T01:41:52.967 回答
1

这可能对您有用:

awk 'BEGIN{system("awk '\''{printf \"%s \", $0} END { print \"\" }'\'' file")}'
AA BB 

或更容易:

awk 'BEGIN{system("paste -sd\" \" file")}'
AA BB
于 2012-04-22T22:27:19.307 回答
0

简单,不要使用awk; 使用tr.

tr '\n' ' ' file; echo;  

或者,如果您在一个管道中需要所有这些

tr '\n' ' ' file | awk 'END { print }'
于 2012-04-22T19:12:50.510 回答
0

如果你想纯粹在 awk 中做,你可以尝试这样的事情:

awk '{printf "%s ", $0} END { print "" }'  <  aabb.txt
于 2012-04-22T19:16:58.163 回答