2016-07-28 12 views
1

私は20万行のファイルを持っています。各行の始まりは、 "IMAGE"、 "HISTO"または "FRAG"で始まります。 IMAGE行にHISTOとFRAG行を結合する必要があります。ここに例があります。最初のフィールドのペアに基づいて行を結合

IMAGE Lots of Data on this line 
HISTO usually numbers 0 0 1 1 0 1 0 
FRAG Always at least 1 of these lines but can be more 

結果はこのように見える必要があります:

>IMAGE Lots of Data on this line HISTO usually numbers 0 0 1 1 0 1 0 FRAG Always at least 1 of these lines but can be more 

IMAGEラインをオーバー開始する前に、多くのFRAG線を有することが可能です。私はかなり多くのツールを使うことができるようにMacを使用していますが、私はviをよく知っています。

+0

[編集ヘルプ](http://stackoverflow.com/editing-help)をご覧ください。 – Cyrus

+0

@James Brown最初のソリューションはうまくいきました。変更されたバージョンは、最初の行の前にスペースを残します。大したことはありませんが、Excelで削除する必要があります。 –

答えて

4

AWK:大声

awk '/^IMAGE/&&NR>1 {print a; a=""} {a=a""$0" "} END{print a}' test.in 

/^IMAGE/ && NR>1 { # if it starts with IMAGE 
    print a  # empty buffer variable to output 
    a=""   # reset the buffer after emptying 
} 
{     # for all records 
    a=a""$0" "  # append to the buffer variable, prob. no need for "" 
} 
END {    # in the end 
    print a   # empty the remaining buffer in the end 
} 
+0

'next'を使用して、すべての値をテストしないでください。 –

関連する問題