我有一个文件:
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
感谢您的帮助。
我有一个文件:
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
感谢您的帮助。
希望您的问题只是出于好奇。毫无疑问,有更好的方法来完成您可能尝试做的任何事情,如果不是的话。
您可以使用变量来表示引号,而不是尝试使用复杂的单引号和双引号序列(如果它们没有正确配对可能会产生奇怪的副作用)。通过本质上是三级引用,它使代码更易于阅读。下面的技术有点类似于 Perl 的q()
引用。
将变量设置q
为单引号的八进制等效项,然后您可以执行以下操作:
awk 'BEGIN{q = "\047"; system("awk " q "{print}" q " file")}'
间距由您决定 - 每个字符串段都连接到其相邻段。
这是您可能会发现更具可读性的另一种方式:
awk 'BEGIN{q = "\047"; system("awk " q"{print}"q " file")}'
这可能对您有用:
awk 'BEGIN{system("awk '\''{printf \"%s \", $0} END { print \"\" }'\'' file")}'
AA BB
或更容易:
awk 'BEGIN{system("paste -sd\" \" file")}'
AA BB
简单,不要使用awk
; 使用tr
.
tr '\n' ' ' file; echo;
或者,如果您在一个管道中需要所有这些
tr '\n' ' ' file | awk 'END { print }'
如果你想纯粹在 awk 中做,你可以尝试这样的事情:
awk '{printf "%s ", $0} END { print "" }' < aabb.txt