2012-06-16 51 views
0

我有兩個文本文件。 hash_only.txt和final_output.txt hash_only.txt如下所示。awk輸出中的控制間距

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 

對於所有在hash_only.txt我想從「final_output.txt」的文件中提取柱2,3的值如193548,401125等,其中第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 

正如你可以看到輸出上述未對準,其中第一場的長度小於normal.I要在第二行開始的確切location.I需要這個以給它作爲一個輸入到gnuplot.Any幫助將不勝感激。

回答

1

這可能爲你工作(GNU SED):

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

說明:

創建從hash_only.txt文件寫出匹配行的文件名ecast_print_與追加的關鍵sed腳本。從提供給sed腳本的輸入文件中刪除前12個字符。

2

您可以使用printf來查看字段的寬度是否一致。

另外,gnuplot不介意字段在文件中沒有完全對齊,如果這是你要做的。所有這一切都是必要的,領域是由空白分隔。