2016-08-25 9 views
0

ファイル1の形式からファイル2の形式(下記)に変換したいと考えています。 名前、最初の数字のグループ、wwwで区切られた2番目の数字のグループの3つの部分を持つタブ区切りのファイル1(最初の2行以下ですが、ファイルに1000行が入ります)があります。 ファイル2(下記)の形式に変換したいと思います。特定の名前のFile1の複数のエントリが別々の行に分割されている場合、分割されます。カラムはタブで区切られ、4つのカラムがあります:name、+、File1の2番目のグループの番号、File1.Iの最初のグループの番号です。私は本当にあなたの助けに感謝します。これらの形式をUNIXで変換する方法

ファイル1

NAME_1 WWW 5 WWW 17 23

NAME_2 WWW 7 54 14 WWW 300 16 29

NAME_3 WWW 6 WWW 26

...

ファイル2

NAME_1 + 17 5

NAME_1 + 23 5

NAME_2 + 300 7

NAME_2 + 16 54

NAME_2 + 29 14

NAME_3 + 26 6

...

答えて

1

複雑な探しの索引算術:

awk '{ 
    n = (NF-3)/2 
    for (i=1; i <= n; i++) 
     print $1, "+", $(2+i), $(NF-n+i) 
}' file1 > file2 
+0

ありがとうございますが、残念ながらそれは私のためには機能しません。私が間違っていることを示すことができますか?また、この部分n =(NF-3/2)は何を説明することができますか?ここで私のコマンドはawk '{n =(NF-3)/ 2 for(i = 1; i <= n; i ++)print $ 1、 "+"、$(2 + i)、$(NF-n + i i = 1; i <= n; i ++)の場合、$ 1、 "+"、$(2 + i)を出力するためにawk:{n =(NF-3)/ 2} 、$(NF-n + i)} awk:^構文エラー – fattel

+0

これを1行に書くと、 'for'の前にセミコロンが必要です。 –

+0

' NF'は現在のレコードのフィールド数です。数学に従ってそれを理解しようとするだけです。 –

関連する問題