2012-04-22 50 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