2012-04-19 19 views
4

の一つのラインに二つの連続した行を置きます。 結果:私はPerlの/ AWKでそれを行うことができますどのようには、私は以下のようなデータを持っているのPerl/AWK

abcd join abcd 
efgh join efgh 

+0

編集内容が変更されました。最初は余分なスペースがなく、2番目のスペースには余分なスペースがあります。また、 'join'自体がデータに明示されているのでしょうか、それとも不幸な偶然のことでしょうか? – sarnold

答えて

13
$ sed 'N;s/\n/ /' input.txt 
abcd join abcd 
efgh join efgh 
+1

私はこれよりも私が嫌いです。 –

+4

これはどのように機能しますか?私はsedのマニュアルからNコマンドがパターンスペースに入力を追加しているのを見ることができます。コマンド区切り文字のようです。他のすべての行でどのように印刷が行われていますか? – haridsv

+1

どのように動作するのか理解できません。説明できますか? :) – robertomarin

2

私の最初の本能:@のKEVのSEDソリューションに触発

perl -lne 'if ($. % 2) { $last = $_; } else { print "$last $_" }' 

ややより簡潔なバージョン:

perl -lpe '$_ .= " " . <>; chomp' 

しかし、私はsedの勝利にこのラウンドを考えます。

+1

'-a'はここでは役に立たない!また、簡潔なPerlソリューションの私の答えを参照してください。 – ikegami

+0

ええ、 '-a'は私がちょうど列で作業していた別のソリューションのcopypastaでした。キャッチをありがとう! –

6

最も簡単な方法は次のとおりです。

paste - - < FILE 

これは代わりに、タブのスペースを使用して結合します

paste -d" " - - < FILE 
+1

タブを挿入する以外は良いです。 'paste -d '' '--''は、望ましい出力によく一致します。そして、 'cat'パイプは必要なく、' paste -d '" - -

+1

@Mike Reed、まさに同じことを言っていました。私はAndrey Yazuのためにそれを修正しました。 – ikegami

+0

+1これは良いコマンドです。 – kev

4

たPerl:

perl -pe's/\n//if $. % 2' file 

ゴーlf challenge:上記を5文字分短縮します。

ゴルフチャレンジソリューション:区切り文字の間

perl -pe'$.%2&&s/ 
//' file 
+0

ニースと簡潔;私はそれが好きです - ほとんどのsedと同じくらいです。 :) –

+0

@ikegami:ここにお会いできてよかった! PMでの私たちの時間以来ずっとずっとでした:-) – neversaint

+0

これはどのように5文字以下で動作しますか? –

2
awk '{getline a; printf "%-s\n", $0 " " a}' file 
+0

短い: 'awk '{getline a; print $ 0、a} 'ファイル' –

3
cat input | paste -sd' \n' 

貼り付け交互リストが指定された場合。

関連する問題