テキストファイルの行の再構成

テキストファイルの行の再構成

だから、次のファイルがあります。

First Line
Second Line 
Third Line
3 0.374
2 0.777
1 0.245
Fourth Line
4 0.687
...

intで始まる行がintで参照される行に追加されるように再構成したいと思います。

First Line 0.245
Second Line 0.777
Third Line 0.374
Fourth Line 0.687
...

答え1

POSIXの使用awk:

awk '$1 in a {print a[$1], $0; next}; {a[++l] = $0}' <file

参照線の前にint行が表示されると、出力がソートされずに失われることに注意してください。

そしてgawkまたはbwk-awk、ソートされた出力を簡単に印刷できます。

gawk '
  $1 in a { a[$1] = a[$1] " " $0; next }
  { a[++l] = $0 }
  END { for (i = 1; i <= length(a); i++) print a[i] }
' <file

他のawk実装では、配列インデックスを並べ替える関数を直接作成する必要があります。

これはまた、ファイル全体の内容をメモリに保持します。

答え2

以下のソリューションは、ソートツールを使用せずにソートされた出力を提供します。

$1 ~ "[0-9]" {
    line[$1] = $2;
    next;
}
{
    aux[++k] = $0;
}
END {
    for(i = 1; i <= k; i++)
        print aux[i], line[i];
}

出力:

First Line 0.245
Second Line  0.777
Third Line 0.374
Fourth Line 0.687

きちんとした形式で印刷したい場合はを使用してくださいprintf

関連情報