重新组织文本文件中的行

重新组织文本文件中的行

所以我有以下文件:

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 行出现在引用行之前,则输出将被丢失。

gawkbwk-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.

相关内容