所以我有以下文件:
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
.