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