2012-04-22 49 views
0

我有一个文件:AWK - 如何改进这个例子?

AA 
BB 

此命令打印出:

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

AA 
BB 

相同,但在 'printf' 式:

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

/bin/sh: Illegal option -, 

如何提高last命令得到结果:

谢谢你的帮助。

回答

1

这可能会实现对你而言:

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

或更容易:

awk 'BEGIN{system("paste -sd\" \" file")}' 
AA BB 
+0

感谢您的好解决方案。 – Tedee12345 2012-04-23 05:23:11

0

简单,不要用awk;使用tr

tr '\n' ' ' file; echo; 

或者,如果你需要的一切,在一个流水线

tr '\n' ' ' file | awk 'END { print }' 
+0

它感谢,但它四处走动等我的东西。 我想要使用如下命令: 'awk'BEGIN {system(“awk'”'''{printf“%s”,$ 0} END {print“”}'“''''file”)}} ' – Tedee12345 2012-04-22 19:41:30

+0

@ Tedee12345你为什么想要做那些毫无意义的系统废话? – Dave 2012-04-22 20:24:31

+0

我想从两个原因使用system()。 1.教育。 2.我想在我的函数中使用system()。 – Tedee12345 2012-04-22 20:37:07

0

如果你想单纯做它在awk的你可以尝试这样的事:

awk '{printf "%s ", $0} END { print "" }' < aabb.txt 
+0

谢谢,但它走过别的我。 我想要使用如下命令: 'awk'BEGIN {system(“awk'”'''{printf“%s”,$ 0} END {print“”}'“''''file”)}} '' – Tedee12345 2012-04-22 19:40:26

2

希望你的问题只是一个好奇心的练习。毫无疑问,有更好的方法可以完成任何你可能试图做的事情,如果事实并非如此。

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

设置一个变量q到一个单引号的八进制等价,那么你可以这样做:

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

间距是由你 - 每一个弦线段将连接到其相邻节段。

这是,你可能会发现更可读的另一种方式:

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

我只从好奇心询问解决方案。 我知道有更好的方法来解决这个问题。 谢谢你的信息。 – Tedee12345 2012-04-23 05:18:25