2

たとえば、次の形式のファイルがいくつかあります { ID Type Size Nodes }:

1234 P 1 56
2212 P 2 45-46
1234 F 
2567 P 3 90,99,101
2212 F
2567 F

ここで、すべての P タイプ行には、同じ ID を持つ一致する F タイプ行が 1 つだけあり、ID はペアごとに異なります。

ファイルを検索し、タイプ P の各行について、同じ ID を持つ一致するタイプ F の行を見つけ、P タイプの行から「サイズ」と「ノード」の値を追加できるようにしたいと考えています。

これは可能ですか?連想配列を使用して bash でそれを行う方法を考えることができますが、sed/awk にこのような何かの気の利いた小さなトリックがあることを望んでいましたが、それを検索する/見るための正しい言葉がありません上。パターンを保持できることはわかっていますが、私の主な問題は、さまざまな ID を検索する最善の方法を見つけることです。

4

4 に答える 4

0

使用法awk -f app.awk file.dat file.dat

app.awk:

FNR==NR && $2 == "P" {
    id=$1
    $1=$2=""
    aux[id]=$0
}

FNR!=NR && $2 == "F" {
    $0 = $0 aux[$1]
    $1=$1
}

FNR!=NR {
    print
}
于 2013-04-19T12:17:32.120 に答える
0
awk '$2=="F"{$3=s[$1];$4=n[$1]}{s[$1]=$3}n[$1]=$4' file

P行が行の前にある場合、これにより順序が保持されFます。sudo_O のおかげで +

于 2013-04-19T12:31:03.093 に答える
0

順序が重要ではなく、すべての P に一致する F 行がある場合は、次のことができます。

grep ' P ' file; grep ' P ' file | sed 's/ P / F /'
于 2013-04-19T12:14:54.097 に答える