1

明確なタイトルがないことをお詫びします。私の質問を説明しようと思います。

AとBの2つのファイルがあります。

ファイルAの形式は次のようになります。

set_time 10 temp max 2 min 1 xyzzy
set_time 10 temp max 2 min 1 abcde
set_time 10 temp max 3 min 2 ersfg
set_time 8  temp max 2 min 0 fdfdf

ファイルBは次のようになります。

xyzzy 7.5
abcde 8.5
ersfg 9.5
fdfdf 9.0

ここで、実行する必要があるのは、ファイルAの最後の列名(xyzzy、、、など)を検索しabcdefdfdf2番目の列の値をファイルBの2番目の列の値に置き換える必要があることです。

したがって、出力は次のようになります。

set_time 7.5 temp max 2 min 1 xyzzy
set_time 8.5 temp max 2 min 1 abcde
set_time 9.5 temp max 3 min 2 ersfg
set_time 9.0 temp max 2 min 0 fdfdf

どんな助けでも大歓迎です。これはTCLフローの一部です。

4

3 に答える 3

2

次のようなマッピングで 2 番目のファイルを読み取ります。

set f [open file_B]
set mapping [dict create]
while {[gets $f l]} {
    if {[feof $f]} break
    dict set mapping {*}$l
}

set_time次に、目的の値を変更しながら、それ自体を出力するコマンドを作成して、元のファイルを処理します。

proc set_time {num_to_replace temp max maxnum min minnum mapval} {
    puts "set_time [dict get $::mapping $mapval] $temp $max $maxnum $min $minnum $mapval"
}

そしてsource、元のデータ ファイルのみ:

source file_A

もちろん、これは、2 つのファイルに、処理を台無しにする他の行が含まれていないことを前提としています。

于 2012-07-19T00:39:15.650 に答える
1

awkおそらく、次のスクリプトが役立つでしょう。

FNR == NR {
    fileA[$1] = $2
    next
}

{
    for (i in fileA) {
        if (i == $NF) {
            $2 = fileA[i]
            print
        }
    }
}

次のように実行します。

awk -f script.awk fileB.txt fileA.txt

結果:

set_time 7.5 temp max 2 min 1 xyzzy
set_time 8.5 temp max 2 min 1 abcde
set_time 9.5 temp max 3 min 2 ersfg
set_time 9.0 temp max 2 min 0 fdfdf
于 2012-07-19T01:44:56.977 に答える
0

選択した言語でこれを行う簡単なスクリプトを作成し、スペース文字で文字列を分割し、配列を使用することができます (ファイルの大きさによって異なります)。

ただし、今回だけ行う必要がある 1 回限りのケースの場合は、Excel を開いて、スペース文字 (または関連するもの) で区切られた CSV としてファイルをインポートします。次に、必要に応じて行を並べ替え、値の列全体をコピーして貼り付けることができます。スペースを含む値の間にいくつかの列を追加し、それらを埋めてから、ファイルをプレーンテキストに保存します。

きれいではないかもしれませんが、単純なデータセットを組み合わせるには非常に効果的です。特に単発のタスクの場合。

于 2012-07-19T00:02:30.237 に答える