2017-05-10 12 views
1

私は(うまくいけば)素早く簡単な質問をしています。私にはたくさんのファイルがあり、そのファイルから$ 1をプリントしたいと思う。ファイルには、それぞれ2〜3行の出力があります。私はこのような何かを得るかもしれない一つのファイルから$ 1を印刷するのであれば:awkは複数のファイルに改行を印字しないでください

をしかし、私がやろうとしていることなど、すべてのファイルからプリントである:

awk '{printf $1}' files* 

私がそれをするとき、出力は基本的にちょうど1つの長い行です:1110000111100000 ...等。私が望むものではありません。出力は次のようになります。

1 0 
0 1 
1 1 

各行は各ファイルの出力を表します。

私が試した:

awk 'BEGIN { ORS=" " }; { print $1}' 

とかなりの数回の反復、これまでのところ成功を。私はこれが簡単であるべきだと知っていますが、答えは私に言及し、助けに感謝します。記録のために、これはどんなクラスのためでもなく、自分の仕事だけです。また、私はここや他の場所の他の記事を見ていて、これまでに何も働いていませんでした。前もって感謝します。

答えて

0
awk '{printf "%s%s", (FNR>1 ? OFS : ors), $0; ors=ORS} END{print ""}' file* 

説明:すべての行について、行の内容に続けて何か(三項式で制御される)を出力します。これは、最初のファイルを除くすべてのファイルの最初の行の改行(最初の行が読み取られるまでorsを設定しないことによって制御されます)と、1行おきの空白の文字です。すべてのファイルを終了すると、終端改行を出力します。 GNU AWKで

+1

ありがとう、エド、それは動作するようです!ダブルチェックだけで、私が望むどの列についても、私はその列に$ 0を変更するだけですか?また、スクリプトの仕組みを説明してください。再度、感謝します! – Dani

+0

回答を収集して検討するのに十分な時間が経過したら、次の作業についてはhttp://stackoverflow.com/help/someone-answersを参照してください。 –

0

(gawkが)次のことを試してください。

awk '{printf "%s ", $1} ENDFILE {print ""}' files* 

最初のprintfが行うスペースで区切って$ 1印刷します。

2番目の印刷では、各ファイルの後に改行が印刷されます。

+1

これは、すべての出力行の最後に余分な空白文字を出力します。 –

関連する問題