7

ここに別の初心者の質問があります。このようなファイルがあります

ジョン
30
マイク
0.0786268
タイソン
0.114889
ガブリエル
0.176072
フィオナ
0.101895

2行ごとに新しい列にシフトする必要があるため、次のようになります

ジョン 30
マイク 0.0786268
タイソン 0.114889
ガブリエル 0.176072
フィオナ 0.101895

私はちょうど今、awk 'NR%2==0'2行ごとに印刷します。誰かが上記のようにそれらを新しい列にシフトする方法を提案してくれませんか. どんな助けでも大歓迎です。

4

8 に答える 8

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

説明:

  • printf行末に改行文字を含めません ( とは異なりprintます)
  • (NR%2?FS:RS)に基づいて、改行 (RS) またはフィールド区切り文字 (FS) を決定します。NR%2

列を区切る必要がある場合\t

awk '{printf "%s%s",$0,NR%2?"\t":RS}'
于 2012-12-29T22:19:46.717 に答える
9

xargs で実行できます。コマンド ラインは非常に短いです。

xargs -n2 < file
于 2012-12-28T11:03:50.637 に答える
1

私はsedこのように使いたくなるでしょう:

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

ただし、これではデータが適切にフォーマットされません。あなたはそれをパイプすることができますcolumn -t

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

しかし、これは不要なようです。paste次のように使用することをお勧めします。

paste - - < file

結果:

John    30
Mike    0.0786268
Tyson   0.114889
Gabriel 0.176072
Fiona   0.101895
于 2012-12-28T10:36:18.843 に答える
1

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

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

見る

于 2012-12-28T09:53:28.480 に答える
1

sed は、awk よりもこれを行う方が優れています。

sed 'N;s/\n/ /g' yourfile

awkでも:

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

ここで別の解決策も確認してください

于 2012-12-28T09:54:33.747 に答える
1
paste - - < file > newfile

貼り付けは、デフォルトで区切りとしてタブを使用します。

于 2012-12-28T17:15:33.283 に答える
0
awk 'NR%2{s=$0; next} {print s, $0}' file

またはデフォルトのアクションを使用

awk 'NR%2{s=$0; next} {$0=s" "$0}1' file
于 2012-12-28T16:40:39.980 に答える