2012-04-22 6 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 -, 

に最後のコマンドを改善する方法結果が得られます。

ありがとうございます。

答えて

1

これはうまくいくかもしれませんあなたのため:

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

以上:

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

良い解決に感謝します。 – Tedee12345

0

シンプル、使用しないでくださいawk; trを使用してください。あなたが1つのパイプラインですべてのことが必要な場合は

tr '\n' ' ' file; echo; 

あるいは、

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

が、それは私の他の何かについて歩きます。 私はこのコマンドを使いたいです: awk BEGIN {system( "awk '"' '' '{printf "%s"、$ 0} END {print ""} ""' "'file"}} ' – Tedee12345

+0

@ Tedee12345なぜあなたは無意味なシステムナンセンスをしたいのですか? – Dave

+0

私は2つの原因からsystem()を使いたいです。 1.教育のため。 2.自分の関数でsystem()を使いたい。 – Tedee12345

0

あなたはこのような何かを試みることができるのawkで純粋にそれをしたい場合:

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

ありがとうございますが、それは他の何かについて私が歩いています。 私はこのコマンドを使いたいです: awk BEGIN {system( "awk '"' '' '{printf "%s"、$ 0} END {print ""} ""' "'file"}} '' – Tedee12345

2

あなたの質問は単なる好奇心の練習に過ぎません。それがそうでない場合、あなたがしようとしていることを達成するためのより良い方法が間違いなくあります。

のではなく、それらが適切にペアリングしていない場合は奇妙な副作用を有することができる開閉単一引用符と二重引用符の複雑なシーケンスを使用しようと、あなたは引用符を表すために変数を使用することができます。本質的には、第3レベルのクォートを持つことで、コードを読みやすくなります。以下の手法は、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

関連する問題