0

私はファイルを持っています:

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

ご協力ありがとうございました。

4

4 に答える 4

2

願わくば、あなたの質問が単なる好奇心の練習であることを願っています。そうでない場合でも、あなたがやろうとしていることを達成するためのより良い方法は間違いなくあります.

一重引用符と二重引用符の複雑なシーケンスを使用しようとするのではなく、適切に組み合わせないと奇妙な副作用が生じる可能性がありますが、変数を使用して引用符を表すことができます。本質的に、第 3 レベルの引用を使用することで、コードが読みやすくなります。q()以下のテクニックは、Perl の引用にいくらか似ています。

変数qを一重引用符に相当する 8 進数に設定すると、次のようになります。

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

間隔は自由です。各文字列セグメントは隣接するセグメントに連結されます。

これは、読みやすくする別の方法です。

awk 'BEGIN{q = "\047"; system("awk " q"{print}"q " file")}'
于 2012-04-23T01:41:52.967 に答える
1

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

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

またはもっと簡単に:

awk 'BEGIN{system("paste -sd\" \" file")}'
AA BB
于 2012-04-22T22:27:19.307 に答える
0

シンプル、使用しないでくださいawk; を使用しますtr

tr '\n' ' ' file; echo;  

または、1つのパイプラインですべてが必要な場合

tr '\n' ' ' file | awk 'END { print }'
于 2012-04-22T19:12:50.510 に答える
0

純粋に awk で実行したい場合は、次のようなことを試すことができます。

awk '{printf "%s ", $0} END { print "" }'  <  aabb.txt
于 2012-04-22T19:16:58.163 に答える