2012-12-28 15 views
5

もう1つの質問があります。私は誰かできた、私はそれがちょうど今awk 'NR%2==0'は毎秒行が印刷されますことを、私このawkで2番目の行を新しい列に移動

 
John 30 
Mike 0.0786268 
Tyson 0.114889 
Gabriel 0.176072 
Fiona 0.101895 

のようになりますように、新しい列に毎秒行をシフトする必要があり、この

 
John 
30 
Mike 
0.0786268 
Tyson 
0.114889 
Gabriel 
0.176072 
Fiona 
0.101895 

ようなファイルを持っています上記のように新しい列に移動する方法を教えてください。どんな助けでも大歓迎です。

+0

関連が、awkに固有ではない:http://stackoverflow.com/questions/8522851/concise-and-portable-join-on-the-unix-command-line –

答えて

1

一つの方法は次のとおりです。sedの

awk '{ printf("%-10s ",$0); if(NR%2==0) printf("\n");}' file 

See it

+0

は、1つのライナーをありがとうそれは本当にうまく動作します。私はちょうどawkの学習を始めました。もう少しお聞きしたいのであれば、printf( "% - 10"、$ 0)はすべての行を1行に出力しますが、その後は理解できませんでした。再度、感謝します。 – Amit

+0

'printf'は改行なしで出力し、'%s'は文字列の書式指定です。 '%-10s'は、長さ10のスペース、左寄せ、長い文字列の切り捨てを行います。私は実際には 'printf("%s "、$ 0)'を代わりに使用し、%sの後ろにスペースを入れ、タブ文字 '\ t'を使います。 – tripleee

+1

printfは関数ではなく、組み込み関数なので、()はあなたがしているとは思っていません。後続のセミコロンは大変ですし、改行を印刷する方法は 'print '' 'です。 –

0

はawkをよりこれを実行した方がよい:

AWKでも
sed 'N;s/\n/ /g' yourfile 

awk '{if(NR%2!=0){p=""}else{p="\n"};printf $0" "p}' your_file 

も別のものをご確認ください解決策here

+0

ありがとう、魅力のような作品 – Amit

+2

sedはawkよりもこれを行う方が良い方法ではありません。 –

1

私はこのようなsedを使用するように誘惑されるだろう:

sed 'N;s/\n/ /' file 

しかし、これはうまくあなたのデータをフォーマットしません。

< file sed 'N;s/\n/ /' | column -t 

しかし、これは不必要なようだ:あなたはcolumn -tにパイプそれをできました。

paste - - < file 

結果::それはこのようにpasteを使用する方が良いでしょう

John 30 
Mike 0.0786268 
Tyson 0.114889 
Gabriel 0.176072 
Fiona 0.101895 
+0

ありがとう、それはペーストでできることを知らなかった – Amit

3

xargsのは、それを行うことができ、コマンドラインは本当に短いです:

xargs -n2 < file 
0
awk 'NR%2{s=$0; next} {print s, $0}' file 

または使用しますdefault action

awk 'NR%2{s=$0; next} {$0=s" "$0}1' file 
0
paste - - <file> newfile 

ペーストはデフォルトでセパレータとしてタブを使用します。

6
awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file 
+1

これは、AWKの最も優れたエレガントな図です。それ以外の解決策はありません。 –

+0

この解決策は、それぞれスペースと改行であるFSとRSのデフォルトに依存しています。 – Tom

+1

+1これは素晴らしいです。 –

関連する問題