0

2つのテキストファイルがあります。hash_only.txtとfinal_output.txthash_only.txtは次のようになります。

193548
401125
401275

final_output.txtは次のようになります。

193548      1199687744  5698758206701808640
193548      1216464960  5698758206761818112
193548      1216464960  5698758206778417152
193548      4236691520  5698758206778945280
401125      2138607488  5698762375908890880
401125       863932288  5698762375909423360
401125      3884158848  5698762375910044160
401125      2609483648  5698762375911032320

以下のようなスクリプトを作成しました。

awk '
FNR==NR {
    hash[$1]
    next
}
$1 in hash {
    print $2,'\t',$3 >> "ecast_print_"$1;
}' hash_only.txt final_output.txt

193548,401125などのhash_only.txtのすべての値について、ファイル'final_output.txt'から列2,3を抽出します。ここで、列1は193548,401125などと一致し、列2,3をprint_193548、print_401125などに出力します。これにより、次のような出力が生成されます。

1133254688 5698771509078629376
1150031904 5698771509371165696
1150031904 5698771510035551232
4170258464 5698771510036082688
2895583264 5698771510036715520
1620908064 5698771510037202176
346232864 5698771510037665280
3366459424 5698771510038193664
2091784224 5698771510332259072
817109024 5698771510332816128
3837335584 5698771510333344512
2562660384 5698771510339882240

上記のように、最初のフィールドの長さが通常より短い場合、出力がずれています.2番目の行を正確な位置から開始したいです.gnuplotへの入力として提供するためにこれが必要です。感謝します。

4

2 に答える 2

2

printfフィールドの幅を一定にするために使用することを検討するかもしれません。

また、gnuplot は、ファイル内でフィールドが完全に整列していなくても、それが目的である場合は気にしません。必要なのは、フィールドが空白で区切られていることだけです。

于 2012-06-16T05:12:08.263 に答える
1

これはうまくいくかもしれません(GNU sed):

sed 's|.*|/^& /{s/.\\{12\\}//;w ecast_print_&\n}|' hash_only.txt |
sed -nf - final_output.txt

説明:

キーが追加されhash_only.txtたファイル名に一致する行を書き出すファイルから sed スクリプトを作成します。ecast_print_最初の 12 文字は、sed スクリプトに提供された入力ファイルから削除されます。

于 2012-06-17T07:28:57.577 に答える