
だから、次のファイルがあります。
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
。