Robocopy batch with wildcards copies more files than it should. Why? - windows

This is my first question her, so please be patient with me :)
I have several folders full of 10,000+ files for daily datasets in the form of 19810101.dbf for the first of January 1981 and so on. I want do robocopy these per year to a folder using a batch file and wildcards. It looks like this:
robocopy d:\files d:\results\1981 1981*.dbf
robocopy d:\files d:\results\1982 1982*.dbf
etc.
The copy works, BUT it copies more files than it should. These include filenames like 19970625.dbf where is no 1981 in sight.
So what I'm I doing wrong here? Is it a bug? I also tried copy and xcopy with the same results. I's really frustrating by now. Can someone please show me the way?
Thank you!
Here is the output of robocopy. There are 20 more files than there should be, from the years 1982 to 1997.
D:\>robocopy d:\files d:\results\1981 1981*.dbf
-------------------------------------------------------------------------------
ROBOCOPY :: Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Gestartet: Thu Nov 27 13:04:01 2014
Quelle : d:\files\
Ziel : d:\results\1981\
Dateien : 1981*.dbf
Optionen: /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
385 d:\files\
100% Neue Datei 98 19810101_T.dbf
100% Neue Datei 98 19810102_T.dbf
100% Neue Datei 117 19810103_T.dbf
100% Neue Datei 98 19810104_T.dbf
100% Neue Datei 98 19810105_T.dbf
100% Neue Datei 98 19810106_T.dbf
100% Neue Datei 98 19810107_T.dbf
100% Neue Datei 98 19810108_T.dbf
100% Neue Datei 98 19810109_T.dbf
100% Neue Datei 98 19810110_T.dbf
100% Neue Datei 98 19810111_T.dbf
100% Neue Datei 98 19810112_T.dbf
100% Neue Datei 98 19810113_T.dbf
100% Neue Datei 98 19810114_T.dbf
100% Neue Datei 98 19810115_T.dbf
100% Neue Datei 98 19810116_T.dbf
100% Neue Datei 98 19810117_T.dbf
100% Neue Datei 98 19810118_T.dbf
100% Neue Datei 98 19810119_T.dbf
100% Neue Datei 98 19810120_T.dbf
100% Neue Datei 98 19810121_T.dbf
100% Neue Datei 98 19810122_T.dbf
100% Neue Datei 98 19810123_T.dbf
100% Neue Datei 98 19810124_T.dbf
100% Neue Datei 98 19810125_T.dbf
100% Neue Datei 98 19810126_T.dbf
100% Neue Datei 98 19810127_T.dbf
100% Neue Datei 98 19810128_T.dbf
100% Neue Datei 98 19810129_T.dbf
100% Neue Datei 98 19810130_T.dbf
100% Neue Datei 98 19810131_T.dbf
100% Neue Datei 98 19810201_T.dbf
100% Neue Datei 98 19810202_T.dbf
100% Neue Datei 98 19810203_T.dbf
100% Neue Datei 98 19810204_T.dbf
100% Neue Datei 98 19810205_T.dbf
100% Neue Datei 98 19810206_T.dbf
100% Neue Datei 117 19810207_T.dbf
100% Neue Datei 117 19810208_T.dbf
100% Neue Datei 117 19810209_T.dbf
100% Neue Datei 98 19810210_T.dbf
100% Neue Datei 98 19810211_T.dbf
100% Neue Datei 98 19810212_T.dbf
100% Neue Datei 98 19810213_T.dbf
100% Neue Datei 98 19810214_T.dbf
100% Neue Datei 98 19810215_T.dbf
100% Neue Datei 98 19810216_T.dbf
100% Neue Datei 98 19810217_T.dbf
100% Neue Datei 98 19810218_T.dbf
100% Neue Datei 98 19810219_T.dbf
100% Neue Datei 98 19810220_T.dbf
100% Neue Datei 98 19810221_T.dbf
100% Neue Datei 98 19810222_T.dbf
100% Neue Datei 98 19810223_T.dbf
100% Neue Datei 98 19810224_T.dbf
100% Neue Datei 98 19810225_T.dbf
100% Neue Datei 98 19810226_T.dbf
100% Neue Datei 98 19810227_T.dbf
100% Neue Datei 98 19810228_T.dbf
100% Neue Datei 98 19810301_T.dbf
100% Neue Datei 98 19810302_T.dbf
100% Neue Datei 98 19810303_T.dbf
100% Neue Datei 98 19810304_T.dbf
100% Neue Datei 98 19810305_T.dbf
100% Neue Datei 98 19810306_T.dbf
100% Neue Datei 117 19810307_T.dbf
100% Neue Datei 117 19810308_T.dbf
100% Neue Datei 117 19810309_T.dbf
100% Neue Datei 117 19810310_T.dbf
100% Neue Datei 117 19810311_T.dbf
100% Neue Datei 117 19810312_T.dbf
100% Neue Datei 117 19810313_T.dbf
100% Neue Datei 117 19810314_T.dbf
100% Neue Datei 117 19810315_T.dbf
100% Neue Datei 98 19810316_T.dbf
100% Neue Datei 98 19810317_T.dbf
100% Neue Datei 98 19810318_T.dbf
100% Neue Datei 98 19810319_T.dbf
100% Neue Datei 117 19810320_T.dbf
100% Neue Datei 117 19810321_T.dbf
100% Neue Datei 117 19810322_T.dbf
100% Neue Datei 117 19810323_T.dbf
100% Neue Datei 117 19810324_T.dbf
100% Neue Datei 117 19810325_T.dbf
100% Neue Datei 117 19810326_T.dbf
100% Neue Datei 117 19810327_T.dbf
100% Neue Datei 117 19810328_T.dbf
100% Neue Datei 117 19810329_T.dbf
100% Neue Datei 117 19810330_T.dbf
100% Neue Datei 117 19810331_T.dbf
100% Neue Datei 117 19810401_T.dbf
100% Neue Datei 117 19810402_T.dbf
100% Neue Datei 117 19810403_T.dbf
100% Neue Datei 117 19810404_T.dbf
100% Neue Datei 117 19810405_T.dbf
100% Neue Datei 117 19810406_T.dbf
100% Neue Datei 117 19810407_T.dbf
100% Neue Datei 117 19810408_T.dbf
100% Neue Datei 117 19810409_T.dbf
100% Neue Datei 117 19810410_T.dbf
100% Neue Datei 117 19810411_T.dbf
100% Neue Datei 117 19810412_T.dbf
100% Neue Datei 117 19810413_T.dbf
100% Neue Datei 117 19810414_T.dbf
100% Neue Datei 117 19810415_T.dbf
100% Neue Datei 117 19810416_T.dbf
100% Neue Datei 98 19810417_T.dbf
100% Neue Datei 98 19810418_T.dbf
100% Neue Datei 98 19810419_T.dbf
100% Neue Datei 98 19810420_T.dbf
100% Neue Datei 98 19810421_T.dbf
100% Neue Datei 98 19810422_T.dbf
100% Neue Datei 98 19810423_T.dbf
100% Neue Datei 98 19810424_T.dbf
100% Neue Datei 117 19810425_T.dbf
100% Neue Datei 117 19810426_T.dbf
100% Neue Datei 117 19810427_T.dbf
100% Neue Datei 117 19810428_T.dbf
100% Neue Datei 117 19810429_T.dbf
100% Neue Datei 117 19810430_T.dbf
100% Neue Datei 117 19810501_T.dbf
100% Neue Datei 117 19810502_T.dbf
100% Neue Datei 117 19810503_T.dbf
100% Neue Datei 117 19810504_T.dbf
100% Neue Datei 117 19810505_T.dbf
100% Neue Datei 117 19810506_T.dbf
100% Neue Datei 117 19810507_T.dbf
100% Neue Datei 117 19810508_T.dbf
100% Neue Datei 117 19810509_T.dbf
100% Neue Datei 117 19810510_T.dbf
100% Neue Datei 117 19810511_T.dbf
100% Neue Datei 117 19810512_T.dbf
100% Neue Datei 117 19810513_T.dbf
100% Neue Datei 117 19810514_T.dbf
100% Neue Datei 117 19810515_T.dbf
100% Neue Datei 117 19810516_T.dbf
100% Neue Datei 117 19810517_T.dbf
100% Neue Datei 117 19810518_T.dbf
100% Neue Datei 117 19810519_T.dbf
100% Neue Datei 117 19810520_T.dbf
100% Neue Datei 117 19810521_T.dbf
100% Neue Datei 117 19810522_T.dbf
100% Neue Datei 117 19810523_T.dbf
100% Neue Datei 117 19810524_T.dbf
100% Neue Datei 117 19810525_T.dbf
100% Neue Datei 117 19810526_T.dbf
100% Neue Datei 117 19810527_T.dbf
100% Neue Datei 117 19810528_T.dbf
100% Neue Datei 117 19810529_T.dbf
100% Neue Datei 117 19810530_T.dbf
100% Neue Datei 117 19810531_T.dbf
100% Neue Datei 117 19810601_T.dbf
100% Neue Datei 117 19810602_T.dbf
100% Neue Datei 117 19810603_T.dbf
100% Neue Datei 117 19810604_T.dbf
100% Neue Datei 117 19810605_T.dbf
100% Neue Datei 117 19810606_T.dbf
100% Neue Datei 117 19810607_T.dbf
100% Neue Datei 117 19810608_T.dbf
100% Neue Datei 117 19810609_T.dbf
100% Neue Datei 117 19810610_T.dbf
100% Neue Datei 117 19810611_T.dbf
100% Neue Datei 117 19810612_T.dbf
100% Neue Datei 117 19810613_T.dbf
100% Neue Datei 117 19810614_T.dbf
100% Neue Datei 117 19810615_T.dbf
100% Neue Datei 117 19810616_T.dbf
100% Neue Datei 117 19810617_T.dbf
100% Neue Datei 117 19810618_T.dbf
100% Neue Datei 117 19810619_T.dbf
100% Neue Datei 117 19810620_T.dbf
100% Neue Datei 117 19810621_T.dbf
100% Neue Datei 117 19810622_T.dbf
100% Neue Datei 117 19810623_T.dbf
100% Neue Datei 117 19810624_T.dbf
100% Neue Datei 117 19810625_T.dbf
100% Neue Datei 117 19810626_T.dbf
100% Neue Datei 117 19810627_T.dbf
100% Neue Datei 117 19810628_T.dbf
100% Neue Datei 117 19810629_T.dbf
100% Neue Datei 117 19810630_T.dbf
100% Neue Datei 117 19810701_T.dbf
100% Neue Datei 117 19810702_T.dbf
100% Neue Datei 117 19810703_T.dbf
100% Neue Datei 117 19810704_T.dbf
100% Neue Datei 117 19810705_T.dbf
100% Neue Datei 117 19810706_T.dbf
100% Neue Datei 117 19810707_T.dbf
100% Neue Datei 117 19810708_T.dbf
100% Neue Datei 117 19810709_T.dbf
100% Neue Datei 117 19810710_T.dbf
100% Neue Datei 117 19810711_T.dbf
100% Neue Datei 117 19810712_T.dbf
100% Neue Datei 117 19810713_T.dbf
100% Neue Datei 117 19810714_T.dbf
100% Neue Datei 117 19810715_T.dbf
100% Neue Datei 117 19810716_T.dbf
100% Neue Datei 117 19810717_T.dbf
100% Neue Datei 117 19810718_T.dbf
100% Neue Datei 117 19810719_T.dbf
100% Neue Datei 117 19810720_T.dbf
100% Neue Datei 117 19810721_T.dbf
100% Neue Datei 117 19810722_T.dbf
100% Neue Datei 117 19810723_T.dbf
100% Neue Datei 117 19810724_T.dbf
100% Neue Datei 117 19810725_T.dbf
100% Neue Datei 117 19810726_T.dbf
100% Neue Datei 117 19810727_T.dbf
100% Neue Datei 117 19810728_T.dbf
100% Neue Datei 117 19810729_T.dbf
100% Neue Datei 117 19810730_T.dbf
100% Neue Datei 117 19810731_T.dbf
100% Neue Datei 117 19810801_T.dbf
100% Neue Datei 117 19810802_T.dbf
100% Neue Datei 117 19810803_T.dbf
100% Neue Datei 117 19810804_T.dbf
100% Neue Datei 117 19810805_T.dbf
100% Neue Datei 117 19810806_T.dbf
100% Neue Datei 117 19810807_T.dbf
100% Neue Datei 117 19810808_T.dbf
100% Neue Datei 117 19810809_T.dbf
100% Neue Datei 117 19810810_T.dbf
100% Neue Datei 117 19810811_T.dbf
100% Neue Datei 117 19810812_T.dbf
100% Neue Datei 117 19810813_T.dbf
100% Neue Datei 117 19810814_T.dbf
100% Neue Datei 117 19810815_T.dbf
100% Neue Datei 117 19810816_T.dbf
100% Neue Datei 117 19810817_T.dbf
100% Neue Datei 117 19810818_T.dbf
100% Neue Datei 117 19810819_T.dbf
100% Neue Datei 117 19810820_T.dbf
100% Neue Datei 117 19810821_T.dbf
100% Neue Datei 117 19810822_T.dbf
100% Neue Datei 117 19810823_T.dbf
100% Neue Datei 117 19810824_T.dbf
100% Neue Datei 117 19810825_T.dbf
100% Neue Datei 117 19810826_T.dbf
100% Neue Datei 117 19810827_T.dbf
100% Neue Datei 117 19810828_T.dbf
100% Neue Datei 117 19810829_T.dbf
100% Neue Datei 117 19810830_T.dbf
100% Neue Datei 117 19810831_T.dbf
100% Neue Datei 117 19810901_T.dbf
100% Neue Datei 117 19810902_T.dbf
100% Neue Datei 117 19810903_T.dbf
100% Neue Datei 117 19810904_T.dbf
100% Neue Datei 117 19810905_T.dbf
100% Neue Datei 117 19810906_T.dbf
100% Neue Datei 117 19810907_T.dbf
100% Neue Datei 117 19810908_T.dbf
100% Neue Datei 117 19810909_T.dbf
100% Neue Datei 117 19810910_T.dbf
100% Neue Datei 117 19810911_T.dbf
100% Neue Datei 117 19810912_T.dbf
100% Neue Datei 117 19810913_T.dbf
100% Neue Datei 117 19810914_T.dbf
100% Neue Datei 117 19810915_T.dbf
100% Neue Datei 117 19810916_T.dbf
100% Neue Datei 117 19810917_T.dbf
100% Neue Datei 117 19810918_T.dbf
100% Neue Datei 117 19810919_T.dbf
100% Neue Datei 117 19810920_T.dbf
100% Neue Datei 117 19810921_T.dbf
100% Neue Datei 117 19810922_T.dbf
100% Neue Datei 117 19810923_T.dbf
100% Neue Datei 117 19810924_T.dbf
100% Neue Datei 117 19810925_T.dbf
100% Neue Datei 117 19810926_T.dbf
100% Neue Datei 117 19810927_T.dbf
100% Neue Datei 117 19810928_T.dbf
100% Neue Datei 117 19810929_T.dbf
100% Neue Datei 117 19810930_T.dbf
100% Neue Datei 117 19811001_T.dbf
100% Neue Datei 117 19811002_T.dbf
100% Neue Datei 117 19811003_T.dbf
100% Neue Datei 117 19811004_T.dbf
100% Neue Datei 117 19811005_T.dbf
100% Neue Datei 117 19811006_T.dbf
100% Neue Datei 117 19811007_T.dbf
100% Neue Datei 117 19811008_T.dbf
100% Neue Datei 117 19811009_T.dbf
100% Neue Datei 117 19811010_T.dbf
100% Neue Datei 117 19811011_T.dbf
100% Neue Datei 117 19811012_T.dbf
100% Neue Datei 117 19811013_T.dbf
100% Neue Datei 117 19811014_T.dbf
100% Neue Datei 117 19811015_T.dbf
100% Neue Datei 117 19811016_T.dbf
100% Neue Datei 117 19811017_T.dbf
100% Neue Datei 117 19811018_T.dbf
100% Neue Datei 117 19811019_T.dbf
100% Neue Datei 117 19811020_T.dbf
100% Neue Datei 117 19811021_T.dbf
100% Neue Datei 117 19811022_T.dbf
100% Neue Datei 98 19811023_T.dbf
100% Neue Datei 98 19811024_T.dbf
100% Neue Datei 98 19811025_T.dbf
100% Neue Datei 117 19811026_T.dbf
100% Neue Datei 98 19811027_T.dbf
100% Neue Datei 117 19811028_T.dbf
100% Neue Datei 117 19811029_T.dbf
100% Neue Datei 117 19811030_T.dbf
100% Neue Datei 117 19811031_T.dbf
100% Neue Datei 117 19811101_T.dbf
100% Neue Datei 117 19811102_T.dbf
100% Neue Datei 117 19811103_T.dbf
100% Neue Datei 117 19811104_T.dbf
100% Neue Datei 117 19811105_T.dbf
100% Neue Datei 98 19811106_T.dbf
100% Neue Datei 98 19811107_T.dbf
100% Neue Datei 98 19811108_T.dbf
100% Neue Datei 98 19811109_T.dbf
100% Neue Datei 98 19811110_T.dbf
100% Neue Datei 98 19811111_T.dbf
100% Neue Datei 98 19811112_T.dbf
100% Neue Datei 117 19811113_T.dbf
100% Neue Datei 98 19811114_T.dbf
100% Neue Datei 98 19811115_T.dbf
100% Neue Datei 98 19811116_T.dbf
100% Neue Datei 98 19811117_T.dbf
100% Neue Datei 117 19811118_T.dbf
100% Neue Datei 117 19811119_T.dbf
100% Neue Datei 117 19811120_T.dbf
100% Neue Datei 117 19811121_T.dbf
100% Neue Datei 117 19811122_T.dbf
100% Neue Datei 117 19811123_T.dbf
100% Neue Datei 98 19811124_T.dbf
100% Neue Datei 98 19811125_T.dbf
100% Neue Datei 98 19811126_T.dbf
100% Neue Datei 98 19811127_T.dbf
100% Neue Datei 98 19811128_T.dbf
100% Neue Datei 98 19811129_T.dbf
100% Neue Datei 98 19811130_T.dbf
100% Neue Datei 98 19811201_T.dbf
100% Neue Datei 98 19811202_T.dbf
100% Neue Datei 98 19811203_T.dbf
100% Neue Datei 98 19811204_T.dbf
100% Neue Datei 98 19811205_T.dbf
100% Neue Datei 98 19811206_T.dbf
100% Neue Datei 98 19811207_T.dbf
100% Neue Datei 98 19811208_T.dbf
100% Neue Datei 98 19811209_T.dbf
100% Neue Datei 98 19811210_T.dbf
100% Neue Datei 98 19811211_T.dbf
100% Neue Datei 98 19811212_T.dbf
100% Neue Datei 98 19811213_T.dbf
100% Neue Datei 98 19811214_T.dbf
100% Neue Datei 98 19811215_T.dbf
100% Neue Datei 98 19811216_T.dbf
100% Neue Datei 98 19811217_T.dbf
100% Neue Datei 98 19811218_T.dbf
100% Neue Datei 98 19811219_T.dbf
100% Neue Datei 98 19811220_T.dbf
100% Neue Datei 98 19811221_T.dbf
100% Neue Datei 98 19811222_T.dbf
100% Neue Datei 98 19811223_T.dbf
100% Neue Datei 98 19811224_T.dbf
100% Neue Datei 98 19811225_T.dbf
100% Neue Datei 98 19811226_T.dbf
100% Neue Datei 98 19811227_T.dbf
100% Neue Datei 98 19811228_T.dbf
100% Neue Datei 98 19811229_T.dbf
100% Neue Datei 98 19811230_T.dbf
100% Neue Datei 117 19811231_T.dbf
100% Neue Datei 117 19820606_T.dbf
100% Neue Datei 117 19840526_T.dbf
100% Neue Datei 98 19850223_T.dbf
100% Neue Datei 117 19850606_T.dbf
100% Neue Datei 98 19851025_T.dbf
100% Neue Datei 117 19861105_T.dbf
100% Neue Datei 117 19870627_T.dbf
100% Neue Datei 117 19880324_T.dbf
100% Neue Datei 117 19881025_T.dbf
100% Neue Datei 117 19900910_T.dbf
100% Neue Datei 117 19910829_T.dbf
100% Neue Datei 98 19920221_T.dbf
100% Neue Datei 117 19930319_T.dbf
100% Neue Datei 117 19930908_T.dbf
100% Neue Datei 117 19940605_T.dbf
100% Neue Datei 98 19950322_T.dbf
100% Neue Datei 117 19950418_T.dbf
100% Neue Datei 98 19960115_T.dbf
100% Neue Datei 98 19960319_T.dbf
100% Neue Datei 117 19970625_T.dbf
------------------------------------------------------------------------------
Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras
Verzeich.: 1 0 1 0 0 0
Dateien: 385 385 0 0 0 0
Bytes: 41.5 k 41.5 k 0 0 0 0
Zeiten: 0:00:01 0:00:00 0:00:00 0:00:01
Geschwindigkeit: 73753 Bytes/Sek.
Geschwindigkeit: 4.220 Megabytes/Min.
Beendet: Thu Nov 27 13:04:03 2014
D:\>

Test this to see if it works with the data you have.
It is unlikely to match a short filename I think.
#echo off
for /L %%a in (1981,1,1999) do robocopy "d:\files" "d:\results\%%a" "%%a????_T.dbf"
This should copy folders in the same way:
#echo off
for /L %%a in (1981,1,1999) do (
for /d %%b in ("d:\files\%%a*") do echo/%%~nxb|findstr "^%%a">nul && robocopy "%%b" "d:\results\%%a\%%~nxb" /s
)
pause
Extra switches are required for hidden/system files etc.

Related

ubiattach failed with too many bad blocks

I was trying to read firmware from a NAND chip, and extract its program and data for analyse.
From online I learned, you must create an UBI device with your image file write to it, then you can mount it to your system.
Description
First I read a bin file from FLASH chip. binwalk I get this.
$ binwalk -Me Flash_data.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
771180 0xBC46C device tree image (dtb)
772444 0xBC95C device tree image (dtb)
823236 0xC8FC4 CRC32 polynomial table, little endian
2703360 0x294000 uImage header, header size: 64 bytes, header CRC: 0xF092DEF5, created: 2016-10-04 21:32:58, image size: 2773040 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0x365DF8B1, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "Linux-3.2.0"
2703424 0x294040 Linux kernel ARM boot executable zImage (little-endian)
2722452 0x298A94 gzip compressed data, maximum compression, from Unix, last modified: 1970-01-01 00:00:00 (null date)
8110080 0x7BC000 UBI erase count header, version: 1, EC: 0x2, VID header offset: 0x800, data offset: 0x1000
From its output files, I foun this ubi image file.
$ binwalk 7BC000.ubi
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 UBI erase count header, version: 1, EC: 0x2, VID header offset: 0x800, data offset: 0x1000
$ file 7BC000.ubi
7BC000.ubi: UBI image, version 1
Some information about NAND chip:
PageSize : 2048
SpareSize : 64
PagesPerBlock : 64
Blocks Size : 128KB + 4KB
Total Block : 2048
Device Size : 256MB + 8192KB8192KB
Bus Width : 8
Then I tried to mount it, like this:
$ sudo modprobe mtdblock
$ sudo modprobe nandsim first_id_byte=0x20 second_id_byte=0xac third_id_byte=0x00 fourth_id_byte=0x15
$ mtdinfo /dev/mtd0
mtd0
Name: NAND simulator partition 0
Type: nand
Eraseblock size: 131072 bytes, 128.0 KiB
Amount of eraseblocks: 4096 (536870912 bytes, 512.0 MiB)
Minimum input/output unit size: 2048 bytes
Sub-page size: 512 bytes
OOB size: 64 bytes
Character device major/minor: 90:0
Bad blocks are allowed: true
Device is writable: true
$ sudo flash_erase /dev/mtd0 0 0
$ cp 7BC000.ubi test_infile
$ sudo ubiformat /dev/mtd0 -O 2048 -f test_infile
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 4096 eraseblocks are supposedly empty
ubiformat: error!: file "test_infile" (size 268713984 bytes) is not multiple of eraseblock size (131072 bytes)
error 0 (Success)
The size of "test_file" is 0x10044000, so I just remove the last 0x4000 bytes, and tried to ubiformat again.
$ dd if=test_infile of=test_infile_dd bs=268697600 count=1
$ sudo ubiformat /dev/mtd0 -O 2048 -f test_infile_dd
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 4096 eraseblocks are supposedly empty
ubiformat: flashing eraseblock 1 -- 0 % complete ubiformat: error!: bad UBI magic 0xffffffff, should be 0x55424923
ubiformat: error!: bad EC header at eraseblock 1 of "test_infile_dd"
I did some research and found out, in this UBI image, there are many blocks, and every block contains data and OOB.
The reason last command fails because it searchs 0x55424923 at wrong position which is 0x20000, because of OOB, 0x55424923 is actually at 0x21000, so I think perhaps delete all of OOB part from "this_file_dd" might work. The bash command and test as follows.
#!/bin/bash
# ./dump.sh
# pagesize 0x20000
# oob size 0x01000
# block 1
dd if=infile of=test_infile_dd_nooob bs=$((0x20000)) count=1
declare -i i=1
# block others
while ((i<2048))
do
dd if=test_infile of=out bs=$((0x21000)) count=1 skip=$i
dd if=out of=outfile bs=$((0x20000)) count=1
cat outfile >> test_infile_dd_nooob
rm out
rm outfile
let i++
done
After remove all OOB, compare 2 file, and noticed that OOB has been remove.
$ xxd test_infile_dd | grep "5542 4923" ⏎
00000000: 5542 4923 0100 0000 0000 0000 0000 0002 UBI#............
00021000: 5542 4923 0100 0000 0000 0000 0000 0002 UBI#............
00042000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
00063000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
00084000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
$ xxd test_infile_dd_nooob | grep "5542 4923"
00000000: 5542 4923 0100 0000 0000 0000 0000 0002 UBI#............
00020000: 5542 4923 0100 0000 0000 0000 0000 0002 UBI#............
00040000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
00060000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
00080000: 5542 4923 0100 0000 0000 0000 0000 0001 UBI#............
Then ubiformat again, another error about bad UBI magic.
$ sudo ubiformat /dev/mtd0 -O 2048 -f test_infile_dd_nooob
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 1 eraseblocks have valid erase counter, mean value is 0
ubiformat: 4095 eraseblocks are supposedly empty
ubiformat: warning!: only 1 of 4096 eraseblocks have valid erase counter
ubiformat: erase counter 0 will be used for all eraseblocks
ubiformat: note, arbitrary erase counter value may be specified using -e option
ubiformat: continue? (y/N) y
ubiformat: use erase counter 0 for all eraseblocks
ubiformat: flashing eraseblock 1074 -- 54 % complete ubiformat: error!: bad UBI magic 00000000, should be 0x55424923
ubiformat: error!: bad EC header at eraseblock 1074 of "test_infile_dd_nooob"
Used ghex to fix wrong EC header in EB-1074, and ubiformat again, same block's CRC is not right.
sudo ubiformat /dev/mtd0 -O 2048 -f test_infile_dd_nooob -e 10
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 1074 eraseblocks have valid erase counter, mean value is 10
ubiformat: 3022 eraseblocks are supposedly empty
ubiformat: use erase counter 10 for all eraseblocks
ubiformat: flashing eraseblock 1074 -- 54 % complete ubiformat: error!: bad CRC 0x7d72af58, should be 00000000
ubiformat: error!: bad EC header at eraseblock 1074 of "test_infile_dd_nooob"
Fix CRC and ubiformat again, enable ubi and ubiattach to mtd0, but another error occurs.
sudo ubiformat /dev/mtd0 -O 2048 -f test_infile_dd_nooob -e 10 ⏎
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 1074 eraseblocks have valid erase counter, mean value is 10
ubiformat: 3022 eraseblocks are supposedly empty
ubiformat: use erase counter 10 for all eraseblocks
ubiformat: flashing eraseblock 1987 -- 100 % complete
ubiformat: formatting eraseblock 4095 -- 100 % complete
$ sudo modprobe ubi
$ sudo modprobe ubi mtd=0
$ sudo ubiattach -m 0 -O 2048
ubiattach: error!: cannot attach mtd0
error 22 (Invalid argument)
Do dmesg I found this message.
$ sudo dmesg
[ 6974.021149] 0001efa0: 00 00 00 00 00 00 00 00 10 0a 00 00 01 00 00 00 00 0a d9 d5 05 f9 20 a1 63 d7 00 00 00 02 fb d2 ...................... .c.......
[ 6974.021150] 0001efc0: ce 15 00 00 00 0d 00 00 02 00 00 00 04 00 20 00 c7 00 00 00 0d 0d 0d 00 00 00 0b 01 b8 00 03 db .............. .................
[ 6974.021151] 0001efe0: 03 9d 03 5e 03 20 02 fd 02 d8 02 93 02 4e 02 1b 01 f6 01 b8 20 00 7a 14 08 00 32 3b 81 0e 04 17 ...^. .......N...... .z...2;....
[ 6974.023703] ubi0 error: validate_ec_hdr [ubi]: node with incompatible UBI version found: this UBI version is 1, image version is 0
[ 6974.023707] ubi0 error: validate_ec_hdr [ubi]: bad EC header
[ 6974.023707] Erase counter header dump:
[ 6974.023708] magic 0x55424923
[ 6974.023708] version 0
[ 6974.023709] ec 10
[ 6974.023709] vid_hdr_offset 2048
[ 6974.023710] data_offset 4096
[ 6974.023710] image_seq 144665903
[ 6974.023711] hdr_crc 0xb574c34c
[ 6974.023711] erase counter header hexdump:
[ 6974.023713] 00000000: 55 42 49 23 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 08 00 00 00 10 00 08 9f 6d 2f 00 00 00 00 UBI#......................m/....
[ 6974.023713] 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b5 74 c3 4c .............................t.L
[ 6974.023715] CPU: 4 PID: 14955 Comm: ubiattach Tainted: G W E 5.7.0-kali1-amd64 #1 Debian 5.7.6-1kali2
[ 6974.023716] Hardware name: Dell Inc. Inspiron 7472/0GHVRJ, BIOS 1.1.6 06/14/2018
[ 6974.023716] Call Trace:
[ 6974.023722] dump_stack+0x66/0x90
[ 6974.023725] validate_ec_hdr+0x8a/0xe0 [ubi]
[ 6974.023729] ubi_io_read_ec_hdr+0x1e9/0x280 [ubi]
[ 6974.023732] ubi_attach+0x1d3/0x14c0 [ubi]
[ 6974.023736] ubi_attach_mtd_dev+0x5b3/0xd30 [ubi]
[ 6974.023741] ? __get_mtd_device+0x2c/0xa0 [mtd]
[ 6974.023743] ? _cond_resched+0x15/0x30
[ 6974.023746] ctrl_cdev_ioctl+0xda/0x1c0 [ubi]
[ 6974.023748] ksys_ioctl+0x87/0xc0
[ 6974.023749] __x64_sys_ioctl+0x16/0x20
[ 6974.023751] do_syscall_64+0x52/0x180
[ 6974.023753] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[ 6974.023754] RIP: 0033:0x7f3f55902c87
[ 6974.023756] Code: 00 00 00 48 8b 05 09 92 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d d9 91 0c 00 f7 d8 64 89 01 48
[ 6974.023756] RSP: 002b:00007ffd4fec6f88 EFLAGS: 00000206 ORIG_RAX: 0000000000000010
[ 6974.023757] RAX: ffffffffffffffda RBX: 00007ffd4fec7020 RCX: 00007f3f55902c87
[ 6974.023758] RDX: 00007ffd4fec6fb0 RSI: 0000000040186f40 RDI: 0000000000000003
[ 6974.023758] RBP: 0000000000000003 R08: 0000000000000001 R09: 0000000000000000
[ 6974.023759] R10: fffffffffffff48e R11: 0000000000000206 R12: 000055c2a393c052
[ 6974.023759] R13: 00007ffd4fec6fb0 R14: 0000000000000000 R15: 0000000000000000
[ 6974.023763] ubi0 error: ubi_io_read_ec_hdr [ubi]: validation failed for PEB 1074
[ 6974.061006] ubi0 error: ubi_attach_mtd_dev [ubi]: failed to attach mtd0, error -22
But I don't know how to solve this, so I just remove block 1074 from file.
$ dd if=test_infile_dd_nooob of=test_infile_dd_nooob_no1074_1 bs=131072 count=1074
$ dd if=test_infile_dd_nooob of=test_infile_dd_nooob_no1074_2 bs=131072 skip=1075
$ cat test_infile_dd_nooob_no1074_1 test_infile_dd_nooob_no1074_2 > test_infile_dd_nooob_no1074
Then ubiformat and attach again, but there was another error.
$ sudo ubiformat /dev/mtd0 -O 2048 -f test_infile_dd_nooob_no1074 -e 10
ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 4096 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 4095 -- 100 % complete
ubiformat: 4096 eraseblocks have valid erase counter, mean value is 10
ubiformat: use erase counter 10 for all eraseblocks
ubiformat: flashing eraseblock 1986 -- 100 % complete
ubiformat: formatting eraseblock 4095 -- 100 % complete
$ sudo ubiattach -m 0 -O 2048 ⏎
ubiattach: error!: cannot attach mtd0
error 22 (Invalid argument)
Check dmesg and found this, this is where I don't know how to do, I don't know how I get so many bad blocks.
$ sudo dmesg
ubi0: scanning is finished
[ 7392.005554] ubi0 error: ubi_attach [ubi]: 1205 PEBs are corrupted and preserved
[ 7392.005554] Corrupted PEBs are: 1805 1802 1793 1678 1674 1670 1666 1662 1654 1653 1652 1649 1640 1639 1626 1625 1621 1605 1587 1586 1581 1563 1553 1540 1534 1533 1532 1531 1530 1529 1528 1527 1526 1525 1524 1523 1522 1521 1520 1519 1518 1517 1516 1515 1514 1512 1511 1510 1509 1508 1507 1506 1505 1504 1503 1502 1501 1500 1499 1498 1496 1495 1494 1493 1492 1491 1490 1489 1488 1487 1486 1485 1484 1483 1482 1481 1471 1449 1448 1447 1446 1445 1444 1441 1439 1438 1437 1436 1435 1434 1433 1432 1431 1430 1429 1428 1425 1424 1423 1422 1421 1420 1419 1418 1417 1416 1415 1414 1413 1412 1411 1410 1409 1408 1407 1406 1405 1404 1403 1402 1401 1400 1399 1398 1397 1396 1395 1394 1393 1391 1390 1389 1388 1387 1386 1385 1384 1383 1382 1381 1380 1379 1378 1377 1376 1375 1374 1373 1372 1371 1370 1369 1368 1367 1366 1365 1364 1363 1362 1361 1360 1359 1358 1357 1356 1355 1354 1353 1352 1351 1350 1349 1348 1347 1346 1345 1344 1343 1342 1341 1340 1339 1338 1337 1335 1334 1333 1332 1331 1330 1329 1328 1327 1326
[ 7392.005578] 1325 1324 1323 1322 1321 1294 1275 1274 1273 1264 1230 1223 1221 1219 1214 1211 1210 1207 1204 1203 1202 1201 1200 1199 1198 1197 1196 1195 1194 1193 1192 1191 1190 1189 1188 1187 1186 1185 1184 1183 1182 1181 1180 1179 1178 1177 1176 1175 1174 1173 1172 1165 1164 1163 1157 1147 1144 1143 1142 1141 1140 1139 1138 1137 1136 1134 1133 1132 1131 1130 1129 1128 1127 1126 1125 1124 1123 1122 1121 1120 1119 1118 1117 1116 1115 1114 1112 1111 1110 1109 1108 1106 1105 1098 1085 1053 1052 1044 1016 1003 1002 977 973 972 963 939 938 937 936 935 934 933 932 931 930 929 928 927 926 925 924 923 922 921 920 919 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 900 899 898 897 896 895 894 893 892 891 890 889 888 887 886 885 884 883 882 881 880 879 878 877 876 875 874 873 872 871 870 869 868 867 866 865 864 863 862 861 860 859 858 857 856 855 854 853 852 851 850 849 848 847 846 845 844 841 840 839 838 837 836 835 834 833 832 831 830 829 828 827 826 825 824 823 822 821 820
[ 7392.005606] 819 818 817 816 815 814 813 812 811 810 809 808 807 806 805 804 803 802 801 800 799 798 797 796 795 794 793 792 791 790 789 788 787 785 784 782 781 780 779 778 777 776 775 774 773 772 771 770 769 768 767 766 765 764 763 762 761 760 759 758 757 756 755 754 753 752 751 750 749 748 747 746 745 744 743 742 741 740 739 738 737 736 735 734 733 732 731 730 729 727 726 725 724 723 722 721 720 719 718 716 715 714 713 712 711 710 709 708 707 706 705 704 703 702 701 700 699 698 697 696 695 694 693 692 691 690 689 688 687 686 685 684 683 682 681 680 679 678 677 676 675 674 673 672 671 670 668 667 666 665 664 663 662 661 660 659 657 656 655 654 653 652 651 650 649 648 647 646 645 644 643 642 641 640 639 638 637 636 635 634 633 632 631 630 629 628 627 626 625 624 623 622 621 620 619 618 617 616 615 614 613 611 610 609 608 607 606 605 604 602 601 600 599 598 597 596 595 594 593 592 591 589 588 587 586 585 584 583 582 581 580 579 578 577 576 575 574 573 572 571 570 569 568 567 566 565 564 563
[ 7392.005634] 562 561 560 559 558 557 556 554 553 552 551 550 549 548 547 546 545 544 543 541 540 539 538 537 536 535 534 533 532 531 530 529 528 527 526 525 524 523 522 521 520 519 518 517 516 515 514 513 512 511 510 509 508 507 506 505 504 503 502 501 500 498 497 496 495 494 493 492 491 489 488 487 486 485 484 483 482 481 480 479 478 477 476 475 474 473 472 471 470 469 468 467 466 465 464 463 461 460 459 458 457 456 455 454 453 452 451 450 449 448 447 446 445 444 443 441 440 438 437 436 435 434 433 432 431 430 429 428 427 426 425 424 423 422 421 420 419 418 417 416 415 414 413 412 411 410 409 408 407 406 405 404 403 402 401 400 399 398 397 396 395 394 393 392 391 390 389 388 387 386 384 383 382 381 380 379 378 377 376 375 374 373 372 371 370 369 368 367 366 365 364 363 362 361 360 359 358 357 356 355 354 353 352 351 350 349 348 347 346 345 344 343 342 341 340 339 338 337 336 335 333 332 331 330 329 328 327 326 325 324 323 322 321 320 319 318 317 316 315 314 313 312 311 310 309 308 307 306
[ 7392.005661] 305 304 303 302 301 300 295 294 293 292 290 289 288 287 286 285 284 283 282 281 280 279 278 277 276 275 274 273 271 270 269 268 267 266 265 264 263 262 261 260 259 258 257 256 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239 238 237 236 235 233 231 230 229 228 227 226 225 224 223 222 221 220 219 218 217 216 215 214 213 212 211 210 209 208 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191 190 189 188 187 186 185 184 183 182 181 180 179 177 176 175 174 172 171 170 169 168 167 166 165 164 163 162 161 160 159 158 157 156 155 154 153 152 151 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30
[ 7392.005690] 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
[ 7392.005698] ubi0 error: ubi_attach.cold [ubi]: too many corrupted PEBs, refusing
[ 7392.028819] ubi0 error: ubi_attach_mtd_dev [ubi]: failed to attach mtd0, error -22
[ 7393.182325] systemd-journald[331]: /dev/kmsg buffer overrun, some messages lost.
I read the official documents, it says only in 2 senerios a block will be marked as bad. One is
when write opertion to eraseblock fails, UBI will move data from bad EB to a good EB, and do some tests so it can confirm whether bad EB is really bad; or when erase opertion have EIO error, then EB will be marked as bad block immediately. I am not sure which reason caused so much bad block.
My questions
In the progess, is my command doing wrong? If not, how to repair this UBI image so I can read its programs and data?
Is there other ways that can get programs and data from this UBI image file?
Tools and versions
Kali 2020.3
mtd-utils 2.1.1

Why am I getting numbers larger than 1000 when I %1000 a number generated by 64 bit mersenne twister engine?

I'm trying to generate a zobrist key for transposition tables in my chess engine.
Here's how I'm generating the 64 bit numbers,
as show here: How to generate 64 bit random numbers?
typedef unsigned long long U64;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_int_distribution<U64> dist(std::llround(std::pow(2,61)),
std::llround(std::pow(2,62)));
rand function:
U64 ZobristH::random64()
{
U64 ranUI = dist(mt);
return ranUI;
}
In order to try and make sure i'm generating random enough numbers I'm using a test distribution function I found online that looks like this (will later input data into excel and look at distribution):
int sampleSize = 2000;
int distArray[sampleSize];
int t = 0;
while (t < 10)
{
for (int i = 0; i < 10000; i++)
{
distArray[(int)(random64() % (sampleSize / 2))]++;
}
t++;
}
for (int i = 0; i < sampleSize; i++)
{
std::cout << distArray[i] << ", ";
}
the results I'm getting look a little something like this:
416763345, 417123246, 7913280, 7914356, 417726722, 417726718, 19, 83886102,
77332499, 14
Are these the decimal representation of binary numbers below 1000? Or am I doing something completely wrong?
Okay I did this to check out the distribution of random numbers; you can run this short program to generate a text file to look to see what values you are getting. Instead of using a function call I just used a lambda within the for loop and instead of setting the values into the array I wrote the values out to the text file before and after the post increment.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <random>
#include <functional> // may not need - included in almost all of my apps
#include <algorithm> // same as above
typedef unsigned long long U64;
int main( int argc, char** argv ) {
std::random_device rd;
std::mt19937_64 mt( rd() );
std::uniform_int_distribution<U64> dist( std::llround( std::pow( 2, 61 ) ),
std::llround( std::pow( 2, 62 ) ) );
auto lambda = [&] { return dist(mt); };
const int sampleSize = 2000;
// int distArray[sampleSize];
int t = 0;
std::ofstream file( "samples.txt" );
while ( t < 10 ) {
file << "Sample: " << (t+1) << "\n";
for ( int i = 0; i < 10000; i++ ) {
auto val = static_cast<int>( (lambda() % (sampleSize / 2)) );
file << std::setw(5) << i << ": " << std::setw(6) << val << "\t"
<< std::setw(6) << val++ << "\n";
// distArray[...]
}
file << "\n\n";
t++;
}
file.close();
/* for ( int i = 0; i < sampleSize; i++ ) {
std::cout << distArray[i] << "\n";
}*/
// Quick & Dirty Way TO Pause The Console
std::cout << "\nPress any key and enter to quit.\n";
char c;
std::cin >> c;
return 0;
}
Then check out the text file that this program generates and if you scroll through the file you will see the distributions. The first column is the value before the post increment and the second column is after. The largest possible value before the post increment that I have seen is 1,000 and after the post increment is 999. I've built and ran this for both 32 & 64 bit platform versions and have seen similar results for the distributions and that they indeed have a uniform distribution.
Sample.txt - Small Version About 1,000 Entries Out The 1st Sample Set
Sample: 1
0: 342 341
1: 517 516
2: 402 401
3: 741 740
4: 238 237
5: 557 556
6: 35 34
7: 572 571
8: 205 204
9: 353 352
10: 301 300
11: 65 64
12: 223 222
13: 647 646
14: 185 184
15: 535 534
16: 97 96
17: 843 842
18: 716 715
19: 294 293
20: 485 484
21: 648 647
22: 406 405
23: 250 249
24: 245 244
25: 915 914
26: 888 887
27: 986 985
28: 345 344
29: 493 492
30: 654 653
31: 860 859
32: 921 920
33: 526 525
34: 793 792
35: 503 502
36: 939 938
37: 802 801
38: 142 141
39: 806 805
40: 540 539
41: 778 777
42: 787 786
43: 884 883
44: 109 108
45: 842 841
46: 794 793
47: 279 278
48: 821 820
49: 112 111
50: 438 437
51: 402 401
52: 69 68
53: 396 395
54: 196 195
55: 655 654
56: 859 858
57: 674 673
58: 417 416
59: 331 330
60: 632 631
61: 210 209
62: 641 640
63: 737 736
64: 838 837
65: 592 591
66: 562 561
67: 883 882
68: 750 749
69: 726 725
70: 253 252
71: 660 659
72: 57 56
73: 401 400
74: 919 918
75: 851 850
76: 345 344
77: 25 24
78: 300 299
79: 781 780
80: 695 694
81: 220 219
82: 378 377
83: 471 470
84: 281 280
85: 945 944
86: 536 535
87: 407 406
88: 431 430
89: 745 744
90: 32 31
91: 389 388
92: 358 357
93: 582 581
94: 820 819
95: 622 621
96: 459 458
97: 233 232
98: 594 593
99: 509 508
100: 260 259
101: 152 151
102: 148 147
103: 137 136
104: 945 944
105: 244 243
106: 968 967
107: 54 53
108: 420 419
109: 58 57
110: 678 677
111: 715 714
112: 780 779
113: 834 833
114: 241 240
115: 669 668
116: 722 721
117: 608 607
118: 805 804
119: 155 154
120: 220 219
121: 520 519
122: 740 739
123: 184 183
124: 198 197
125: 247 246
126: 115 114
127: 520 519
128: 457 456
129: 864 863
130: 659 658
131: 511 510
132: 718 717
133: 119 118
134: 588 587
135: 113 112
136: 518 517
137: 164 163
138: 375 374
139: 866 865
140: 382 381
141: 526 525
142: 621 620
143: 680 679
144: 147 146
145: 712 711
146: 408 407
147: 486 485
148: 7 6
149: 203 202
150: 741 740
151: 290 289
152: 810 809
153: 960 959
154: 449 448
155: 683 682
156: 997 996
157: 454 453
158: 131 130
159: 427 426
160: 157 156
161: 3 2
162: 427 426
163: 554 553
164: 806 805
165: 228 227
166: 431 430
167: 174 173
168: 845 844
169: 121 120
170: 397 396
171: 770 769
172: 17 16
173: 761 760
174: 736 735
175: 629 628
176: 772 771
177: 417 416
178: 739 738
179: 226 225
180: 301 300
181: 217 216
182: 746 745
183: 344 343
184: 607 606
185: 927 926
186: 428 427
187: 385 384
188: 287 286
189: 537 536
190: 705 704
191: 649 648
192: 127 126
193: 252 251
194: 160 159
195: 390 389
196: 282 281
197: 66 65
198: 659 658
199: 844 843
200: 358 357
201: 360 359
202: 872 871
203: 495 494
204: 695 694
205: 988 987
206: 969 968
207: 641 640
208: 799 798
209: 30 29
210: 109 108
211: 675 674
212: 345 344
213: 309 308
214: 807 806
215: 283 282
216: 457 456
217: 193 192
218: 972 971
219: 330 329
220: 914 913
221: 508 507
222: 624 623
223: 254 253
224: 342 341
225: 69 68
226: 918 917
227: 551 550
228: 148 147
229: 645 644
230: 905 904
231: 503 502
232: 980 979
233: 881 880
234: 137 136
235: 202 201
236: 808 807
237: 988 987
238: 497 496
239: 506 505
240: 576 575
241: 671 670
242: 874 873
243: 217 216
244: 808 807
245: 741 740
246: 14 13
247: 206 205
248: 894 893
249: 180 179
250: 4 3
251: 27 26
252: 62 61
253: 203 202
254: 392 391
255: 868 867
256: 673 672
257: 881 880
258: 664 663
259: 831 830
260: 293 292
261: 916 915
262: 860 859
263: 487 486
264: 642 641
265: 161 160
266: 881 880
267: 233 232
268: 423 422
269: 12 11
270: 398 397
271: 993 992
272: 323 322
273: 878 877
274: 114 113
275: 42 41
276: 58 57
277: 398 397
278: 878 877
279: 64 63
280: 873 872
281: 841 840
282: 506 505
283: 412 411
284: 545 544
285: 887 886
286: 17 16
287: 504 503
288: 350 349
289: 772 771
290: 16 15
291: 597 596
292: 553 552
293: 25 24
294: 324 323
295: 242 241
296: 580 579
297: 479 478
298: 702 701
299: 640 639
300: 173 172
301: 918 917
302: 678 677
303: 714 713
304: 258 257
305: 97 96
306: 304 303
307: 80 79
308: 394 393
309: 940 939
310: 985 984
311: 651 650
312: 42 41
313: 179 178
314: 672 671
315: 915 914
316: 160 159
317: 332 331
318: 887 886
319: 370 369
320: 850 849
321: 730 729
322: 395 394
323: 889 888
324: 114 113
325: 505 504
326: 381 380
327: 578 577
328: 762 761
329: 896 895
330: 793 792
331: 295 294
332: 488 487
333: 599 598
334: 182 181
335: 25 24
336: 623 622
337: 396 395
338: 898 897
339: 981 980
340: 645 644
341: 806 805
342: 205 204
343: 404 403
344: 234 233
345: 36 35
346: 659 658
347: 285 284
348: 62 61
349: 608 607
350: 632 631
351: 825 824
352: 585 584
353: 685 684
354: 14 13
355: 828 827
356: 720 719
357: 871 870
358: 88 87
359: 716 715
360: 879 878
361: 650 649
362: 464 463
363: 898 897
364: 930 929
365: 194 193
366: 997 996
367: 105 104
368: 776 775
369: 398 397
370: 962 961
371: 434 433
372: 954 953
373: 548 547
374: 989 988
375: 943 942
376: 229 228
377: 866 865
378: 554 553
379: 567 566
380: 379 378
381: 564 563
382: 738 737
383: 468 467
384: 660 659
385: 693 692
386: 784 783
387: 739 738
388: 662 661
389: 474 473
390: 545 544
391: 958 957
392: 703 702
393: 316 315
394: 571 570
395: 95 94
396: 497 496
397: 672 671
398: 676 675
399: 821 820
400: 368 367
401: 7 6
402: 817 816
403: 221 220
404: 839 838
405: 578 577
406: 635 634
407: 453 452
408: 70 69
409: 764 763
410: 78 77
411: 968 967
412: 295 294
413: 483 482
414: 392 391
415: 23 22
416: 389 388
417: 678 677
418: 150 149
419: 863 862
420: 677 676
421: 676 675
422: 455 454
423: 405 404
424: 126 125
425: 753 752
426: 821 820
427: 328 327
428: 773 772
429: 596 595
430: 645 644
431: 829 828
432: 377 376
433: 444 443
434: 813 812
435: 395 394
436: 794 793
437: 641 640
438: 98 97
439: 827 826
440: 824 823
441: 681 680
442: 736 735
443: 288 287
444: 560 559
445: 781 780
446: 556 555
447: 327 326
448: 820 819
449: 859 858
450: 686 685
451: 919 918
452: 267 266
453: 128 127
454: 583 582
455: 446 445
456: 783 782
457: 712 711
458: 378 377
459: 367 366
460: 52 51
461: 316 315
462: 780 779
463: 398 397
464: 435 434
465: 788 787
466: 380 379
467: 235 234
468: 748 747
469: 429 428
470: 91 90
471: 675 674
472: 853 852
473: 674 673
474: 277 276
475: 179 178
476: 264 263
477: 511 510
478: 514 513
479: 979 978
480: 845 844
481: 728 727
482: 904 903
483: 874 873
484: 750 749
485: 659 658
486: 376 375
487: 713 712
488: 393 392
489: 538 537
490: 896 895
491: 879 878
492: 347 346
493: 819 818
494: 210 209
495: 707 706
496: 869 868
497: 319 318
498: 832 831
499: 498 497
500: 71 70
501: 290 289
502: 861 860
503: 295 294
504: 888 887
505: 515 514
506: 222 221
507: 661 660
508: 813 812
509: 969 968
510: 547 546
511: 900 899
512: 58 57
513: 805 804
514: 428 427
515: 453 452
516: 23 22
517: 969 968
518: 718 717
519: 775 774
520: 395 394
521: 521 520
522: 522 521
523: 465 464
524: 317 316
525: 216 215
526: 254 253
527: 696 695
528: 677 676
529: 21 20
530: 318 317
531: 301 300
532: 142 141
533: 877 876
534: 486 485
535: 981 980
536: 516 515
537: 254 253
538: 328 327
539: 385 384
540: 2 1
541: 405 404
542: 387 386
543: 794 793
544: 48 47
545: 641 640
546: 814 813
547: 981 980
548: 354 353
549: 281 280
550: 561 560
551: 683 682
552: 247 246
553: 739 738
554: 370 369
555: 799 798
556: 680 679
557: 915 914
558: 638 637
559: 254 253
560: 705 704
561: 320 319
562: 640 639
563: 487 486
564: 47 46
565: 852 851
566: 749 748
567: 419 418
568: 300 299
569: 507 506
570: 141 140
571: 972 971
572: 895 894
573: 988 987
574: 279 278
575: 268 267
576: 392 391
577: 530 529
578: 679 678
579: 855 854
580: 246 245
581: 645 644
582: 624 623
583: 417 416
584: 203 202
585: 30 29
586: 9 8
587: 585 584
588: 573 572
589: 471 470
590: 504 503
591: 290 289
592: 588 587
593: 230 229
594: 351 350
595: 651 650
596: 615 614
597: 502 501
598: 352 351
599: 472 471
// 600 - 699 omitted to make space to fit answer
700: 247 246
701: 894 893
702: 809 808
703: 382 381
704: 81 80
705: 574 573
706: 507 506
707: 508 507
708: 569 568
709: 947 946
710: 384 383
711: 14 13
712: 627 626
713: 951 950
714: 825 824
715: 657 656
716: 206 205
717: 598 597
718: 300 299
719: 266 265
720: 909 908
721: 206 205
722: 126 125
723: 841 840
724: 586 585
725: 348 347
726: 100 99
727: 361 360
728: 695 694
729: 556 555
730: 66 65
731: 5 4
732: 686 685
733: 488 487
734: 149 148
735: 622 621
736: 476 475
737: 488 487
738: 371 370
739: 331 330
740: 965 964
741: 141 140
742: 396 395
743: 917 916
744: 31 30
745: 924 923
746: 283 282
747: 369 368
748: 519 518
749: 830 829
750: 688 687
751: 374 373
752: 41 40
753: 418 417
754: 766 765
755: 854 853
756: 453 452
757: 521 520
758: 640 639
759: 185 184
760: 41 40
761: 125 124
762: 723 722
763: 341 340
764: 142 141
765: 754 753
766: 459 458
767: 899 898
768: 166 165
769: 374 373
770: 572 571
771: 304 303
772: 352 351
773: 235 234
774: 879 878
775: 736 735
776: 576 575
777: 56 55
778: 102 101
779: 170 169
780: 208 207
781: 135 134
782: 919 918
783: 599 598
784: 37 36
785: 997 996
786: 922 921
787: 502 501
788: 29 28
789: 173 172
790: 54 53
791: 601 600
792: 535 534
793: 64 63
794: 723 722
795: 491 490
796: 685 684
797: 58 57
798: 272 271
799: 261 260
800: 81 80
801: 149 148
802: 129 128
803: 712 711
804: 377 376
805: 151 150
806: 514 513
807: 14 13
808: 838 837
809: 347 346
810: 517 516
811: 442 441
812: 264 263
813: 883 882
814: 447 446
815: 140 139
816: 195 194
817: 841 840
818: 218 217
819: 858 857
820: 28 27
821: 222 221
822: 223 222
823: 906 905
824: 873 872
825: 492 491
826: 826 825
827: 738 737
828: 307 306
829: 185 184
830: 525 524
831: 449 448
832: 646 645
833: 686 685
834: 942 941
835: 433 432
836: 881 880
837: 824 823
838: 641 640
839: 290 289
840: 897 896
841: 4 3
842: 124 123
843: 679 678
844: 524 523
845: 424 423
846: 282 281
847: 625 624
848: 414 413
849: 647 646
850: 129 128
851: 395 394
852: 720 719
853: 318 317
854: 262 261
855: 402 401
856: 413 412
857: 139 138
858: 549 548
859: 472 471
860: 162 161
861: 605 604
862: 67 66
863: 980 979
864: 465 464
865: 912 911
866: 219 218
867: 648 647
868: 619 618
869: 331 330
870: 625 624
871: 360 359
872: 425 424
873: 935 934
874: 89 88
875: 641 640
876: 535 534
877: 404 403
878: 966 965
879: 27 26
880: 281 280
881: 637 636
882: 57 56
883: 152 151
884: 156 155
885: 813 812
886: 340 339
887: 181 180
888: 921 920
889: 306 305
890: 101 100
891: 178 177
892: 417 416
893: 845 844
894: 904 903
895: 295 294
896: 346 345
897: 654 653
898: 357 356
899: 929 928
900: 195 194
901: 499 498
902: 377 376
903: 727 726
904: 570 569
905: 853 852
906: 71 70
907: 580 579
908: 642 641
909: 889 888
910: 559 558
911: 134 133
912: 324 323
913: 120 119
914: 991 990
915: 6 5
916: 708 707
917: 347 346
918: 929 928
919: 454 453
920: 636 635
921: 218 217
922: 739 738
923: 715 714
924: 87 86
925: 782 781
926: 670 669
927: 845 844
928: 79 78
929: 730 729
930: 58 57
931: 216 215
932: 711 710
933: 898 897
934: 871 870
935: 388 387
936: 389 388
937: 944 943
938: 927 926
939: 88 87
940: 617 616
941: 940 939
942: 948 947
943: 927 926
944: 646 645
945: 125 124
946: 615 614
947: 846 845
948: 705 704
949: 998 997
950: 304 303
951: 346 345
952: 675 674
953: 783 782
954: 129 128
955: 69 68
956: 17 16
957: 646 645
958: 559 558
959: 62 61
960: 807 806
961: 571 570
962: 54 53
963: 297 296
964: 771 770
965: 972 971
966: 829 828
967: 786 785
968: 650 649
969: 101 100
970: 705 704
971: 690 689
972: 365 364
973: 304 303
974: 82 81
975: 776 775
976: 495 494
977: 586 585
978: 556 555
979: 77 76
980: 640 639
981: 161 160
982: 910 909
983: 46 45
984: 43 42
985: 162 161
986: 514 513
987: 654 653
988: 668 667
989: 126 125
990: 254 253
991: 133 132
992: 398 397
993: 993 992
994: 357 356
995: 298 297
996: 519 518
997: 904 903
998: 382 381
999: 28 27
1000: 19 18
1001: 939 938
1002: 868 867
1003: 888 887
1004: 576 575
1005: 183 182
1006: 174 173
1007: 679 678
1008: 831 830
1009: 464 463
1010: 876 875
1011: 738 737
1012: 447 446
1013: 385 384
1014: 271 270
1015: 38 37
1016: 28 27
1017: 451 450
1018: 162 161
1019: 847 846
1020: 430 429
1021: 849 848
1022: 207 206
1023: 196 195
1024: 42 41
1025: 709 708
1026: 557 556
1027: 173 172
1028: 788 787
1029: 160 159
1030: 535 534
1031: 555 554
1032: 252 251
1033: 111 110
1034: 476 475
1035: 780 779
1036: 44 43
1037: 190 189
1038: 443 442
1039: 655 654
1040: 7 6
1041: 845 844
1042: 856 855
1043: 274 273
1044: 933 932
1045: 336 335
1046: 185 184
1047: 580 579
1048: 807 806
1049: 286 285
1050: 409 408
1051: 347 346
1052: 461 460
1053: 624 623
1054: 378 377
1055: 903 902
1056: 483 482
1057: 838 837
1058: 809 808
1059: 919 918
1060: 544 543
1061: 458 457
1062: 121 120
1063: 192 191
1064: 126 125
1065: 843 842
1066: 927 926
1067: 390 389
1068: 567 566
1069: 1000 999
Entry 1069 is the first occurrence in this sample set to reach 1,000. I've ran this about a dozen times both in 32bit and 64bit modes and I did not see any value go above 1,000.
I'm not sure but I think that this line in your code is what is giving you your problem(s):
distArray[(int)(random64() % (sampleSize / 2))]++;

How to extract Photoshop curve points to RGB number array?

Hi I made some filter effects using Photoshop curves and they look like this:
Is there a way I can extract each one of the 256 numbers from each color so it is a number array like this?
var r = [0, 0, 0, 1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 47, 48, 49, 52, 54, 55, 57, 59, 60, 62, 65, 67, 69, 70, 72, 74, 77, 79, 81, 83, 86, 88, 90, 92, 94, 97, 99, 101, 103, 107, 109, 111, 112, 116, 118, 120, 124, 126, 127, 129, 133, 135, 136, 140, 142, 143, 145, 149, 150, 152, 155, 157, 159, 162, 163, 165, 167, 170, 171, 173, 176, 177, 178, 180, 183, 184, 185, 188, 189, 190, 192, 194, 195, 196, 198, 200, 201, 202, 203, 204, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 218, 219, 219, 220, 221, 222, 223, 224, 225, 226, 227, 227, 228, 229, 229, 230, 231, 232, 232, 233, 234, 234, 235, 236, 236, 237, 238, 238, 239, 239, 240, 241, 241, 242, 242, 243, 244, 244, 245, 245, 245, 246, 247, 247, 248, 248, 249, 249, 249, 250, 251, 251, 252, 252, 252, 253, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]
Sorry for the question if it's stupid, i'm not even sure what i'm asking, it's late.
UPDATE: following Mark Setchell's answer, i was able to create a saved.ppm file with these values inside it.
The last step was to extract the RGB values from this long string of numbers, Red is the 0th, 3nd, 6th number, Green is the 1st, 4th, 7th number etc.
For anyone else's interest, I was trying to create a filter on Photoshop curves, then extract its RGB values and apply it using pixel cross processing on HTML Canvas, similar to a demo shown here.
Here is a totally different, and simpler way of doing it. Save the data below in a file called ramp.ppm - it is a Portable Pixmap format from the NetPBM suite see Wikipedia here. It is a black-to-white greyscale ramp 256 pixels wide and 1 pixel tall.
Load that into Photoshop and apply your curve to it then save as a PNG file.
P3
256 1
255
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
16 16 16
17 17 17
18 18 18
19 19 19
20 20 20
21 21 21
22 22 22
23 23 23
24 24 24
25 25 25
26 26 26
27 27 27
28 28 28
29 29 29
30 30 30
31 31 31
32 32 32
33 33 33
34 34 34
35 35 35
36 36 36
37 37 37
38 38 38
39 39 39
40 40 40
41 41 41
42 42 42
43 43 43
44 44 44
45 45 45
46 46 46
47 47 47
48 48 48
49 49 49
50 50 50
51 51 51
52 52 52
53 53 53
54 54 54
55 55 55
56 56 56
57 57 57
58 58 58
59 59 59
60 60 60
61 61 61
62 62 62
63 63 63
64 64 64
65 65 65
66 66 66
67 67 67
68 68 68
69 69 69
70 70 70
71 71 71
72 72 72
73 73 73
74 74 74
75 75 75
76 76 76
77 77 77
78 78 78
79 79 79
80 80 80
81 81 81
82 82 82
83 83 83
84 84 84
85 85 85
86 86 86
87 87 87
88 88 88
89 89 89
90 90 90
91 91 91
92 92 92
93 93 93
94 94 94
95 95 95
96 96 96
97 97 97
98 98 98
99 99 99
100 100 100
101 101 101
102 102 102
103 103 103
104 104 104
105 105 105
106 106 106
107 107 107
108 108 108
109 109 109
110 110 110
111 111 111
112 112 112
113 113 113
114 114 114
115 115 115
116 116 116
117 117 117
118 118 118
119 119 119
120 120 120
121 121 121
122 122 122
123 123 123
124 124 124
125 125 125
126 126 126
127 127 127
128 128 128
129 129 129
130 130 130
131 131 131
132 132 132
133 133 133
134 134 134
135 135 135
136 136 136
137 137 137
138 138 138
139 139 139
140 140 140
141 141 141
142 142 142
143 143 143
144 144 144
145 145 145
146 146 146
147 147 147
148 148 148
149 149 149
150 150 150
151 151 151
152 152 152
153 153 153
154 154 154
155 155 155
156 156 156
157 157 157
158 158 158
159 159 159
160 160 160
161 161 161
162 162 162
163 163 163
164 164 164
165 165 165
166 166 166
167 167 167
168 168 168
169 169 169
170 170 170
171 171 171
172 172 172
173 173 173
174 174 174
175 175 175
176 176 176
177 177 177
178 178 178
179 179 179
180 180 180
181 181 181
182 182 182
183 183 183
184 184 184
185 185 185
186 186 186
187 187 187
188 188 188
189 189 189
190 190 190
191 191 191
192 192 192
193 193 193
194 194 194
195 195 195
196 196 196
197 197 197
198 198 198
199 199 199
200 200 200
201 201 201
202 202 202
203 203 203
204 204 204
205 205 205
206 206 206
207 207 207
208 208 208
209 209 209
210 210 210
211 211 211
212 212 212
213 213 213
214 214 214
215 215 215
216 216 216
217 217 217
218 218 218
219 219 219
220 220 220
221 221 221
222 222 222
223 223 223
224 224 224
225 225 225
226 226 226
227 227 227
228 228 228
229 229 229
230 230 230
231 231 231
232 232 232
233 233 233
234 234 234
235 235 235
236 236 236
237 237 237
238 238 238
239 239 239
240 240 240
241 241 241
242 242 242
243 243 243
244 244 244
245 245 245
246 246 246
247 247 247
248 248 248
249 249 249
250 250 250
251 251 251
252 252 252
253 253 253
254 254 254
255 255 255
If you have Linux, and you have ImageMagick, you can then convert the saved PNG file back into a PPM file with
convert saved.png -compress none saved.ppm
The file saved.ppm will then show you the output of your curve for each input value in the greyscale ramp - in effect it will be the 256 values you are looking for.
If you don't have ImageMagick, just give me the PNG file and I'll convert it for you.
I don't feel like writing the code today, least of all when you are not too sure what you are up to! However, what you are asking is perfectly achievable.
If you save the curve you have created (the Save option is in the top right menu), you will get a .ACV file. The format of this file is given here if you scroll down to the section entitled Curves. It is a pretty simple format with just an identifier and a version number then a count of the number of points that you have defined for your curve, i.e. 6 in your case. Then, for each point, the 4 coordinates. These can be pretty easily extracted with Perl or similar.
You could then fit a curve to those points, probably using GNUplot, and interpolate to find the points you are looking for.
Excerpt from referenced document:
Here is an extract from some code I wrote in Perl that actually writes a .ACV file. I know you will actually want to read one, bit you'll get the idea of the byte packing technique...
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
use Data::Dumper;
my $Debug=1; # 1=print debug messages, 0=don't
my $NPOINTS=5; # Number of points in curve we create
....
.... other stuff
....
# Work out name of the curve file = image basename + acv
my $curvefile=substr($imagename,0,rindex($imagename,'.')) . ".acv";
open(my $out,'>:raw',$curvefile) or die "Unable to open: $!";
print $out pack("s>",4); # Version=4
print $out pack("s>",4); # Number of curves in file = Master NULL curve + R + G + B
print $out pack("s>",2); # Master NULL curve with 2 points for all channels
print $out pack("s>",0 ),pack("s>",0 ); # 0 out, 0 in
print $out pack("s>",255),pack("s>",255); # 255 out, 255 in
print $out pack("s>",2+$NPOINTS); # Red curve
print $out pack("s>",0 ),pack("s>",0 ); # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
print $out pack("s>",$Rpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255); # 255 out, 255 in
print $out pack("s>",2+$NPOINTS); # Green curve
print $out pack("s>",0 ),pack("s>",0 ); # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
print $out pack("s>",$Gpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255); # 255 out, 255 in
print $out pack("s>",2+$NPOINTS); # Blue curve
print $out pack("s>",0 ),pack("s>",0 ); # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
print $out pack("s>",$Bpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255); # 255 out, 255 in
close($out);

calculating on specific fields with awk

I got a csv file with that kind of informations :
2013 Cat.1 10 Structure1 Code1 34.10
2014 Cat.1 25 Structure1 Code1 254.24
2013 Cat.2 250 Structure1 Code1 2456.4
2014 Cat.2 234 Structure1 Code1 2345.9
2013 Cat.1 5 Structure2 Code2 59
2013 Cat.1 1 Structure2 Code2 18
2014 Cat.1 8 Structure2 Code2 123
2014 Cat.1 1 Structure2 Code2 18
2013 Cat.2 64 Structure2 Code2 59
2013 Cat.2 8 Structure2 Code2 18
2014 Cat.2 70 Structure2 Code2 123
2014 Cat.2 11 Structure2 Code2 18
and the result file I would like is that kind :
2013 Cat.1 10 Structure1 Code1 34.10
2014 Cat.1 25 Structure1 Code1 254.24
2013 Cat.2 250 Structure1 Code1 2456.4
2014 Cat.2 234 Structure1 Code1 2345.9
2013 Cat.1 6 (5+1) Structure2 Code2 77 (59+18)
2014 Cat.1 9 (8+1) Structure2 Code2 141 (123+18)
2013 Cat.2 72 (64+8) Structure2 Code2 77 (59+18)
2014 Cat.2 81 (70+11) Structure2 Code2 141 (123+18)
Is this possible using awk? I only have 2 different fields on this example for the second structure, but could be much more...
I'm very new to programming and awk in particular.
Thanks for any answer!
awk to the rescue!
Not the full solution but may give you ideas
$awk '{
k = $1 FS $2 FS $4 FS $5
a[k] += $3
as[k] = as[k] ? as[k] "+" $3 : "(" $3
b[k] += $6
bs[k] = bs[k] ? bs[k] "+" $6 : "(" $6
}
END {
for (k in a) {
print k, a[k], as[k] ")", b[k], bs[k] ")"
}
}' file
will give you
2014 Cat.2 Structure2 Code2 81 (70+11) 141 (123+18)
2014 Cat.1 Structure2 Code2 9 (8+1) 141 (123+18)
2014 Cat.2 Structure1 Code1 234 (234) 2345.9 (2345.9)
2014 Cat.1 Structure1 Code1 25 (25) 254.24 (254.24)
2013 Cat.2 Structure2 Code2 72 (64+8) 77 (59+18)
2013 Cat.1 Structure2 Code2 6 (5+1) 77 (59+18)
2013 Cat.2 Structure1 Code1 250 (250) 2456.4 (2456.4)
2013 Cat.1 Structure1 Code1 10 (10) 34.1 (34.10)
Note that the column order changed to reuse k and single entry values are also wrapped with parans. Both can be handled with little effort.
Another awk answer, GNU awk specific. I assume you don't actually want to print out the addition formula.
gawk '
{ data[$1 OFS $2][$4 OFS $5][1] += $3
data[$1 OFS $2][$4 OFS $5][2] += $6 }
END {
for (k1 in data) {
for (k2 in data[k1]) {
print k1, data[k1][k2][1], k2, data[k1][k2][2]
}
}
}
' | sort -k4,5 -k2,2 -k1,1 | column -t
2013 Cat.1 10 Structure1 Code1 34.1
2014 Cat.1 25 Structure1 Code1 254.24
2013 Cat.2 250 Structure1 Code1 2456.4
2014 Cat.2 234 Structure1 Code1 2345.9
2013 Cat.1 6 Structure2 Code2 77
2014 Cat.1 9 Structure2 Code2 141
2013 Cat.2 72 Structure2 Code2 77
2014 Cat.2 81 Structure2 Code2 141
Here is a possible answer:
awk 'BEGIN{FS="[ ]+"; OFS="\t";}
NR==FNR{
key = $1"-"$2"-"$4"-"$5
idx[key] = idx[key]+1
a[key][idx[key]] = $3
c[key][idx[key]] = $6
}
NR!=FNR{
key = $1"-"$2"-"$4"-"$5
if(idx[key]==1){$1=$1; print ;next;}
if(idx[key]<0){next;}
line1 =" ("a[key][1]
line2 =" ("c[key][1]
sum1 = a[key][1]
sum2 = c[key][1]
for(i = 2; i< idx[key]; i++) {
line1 = line1"+"a[key][i]
line2 = line2"+"c[key][i]
sum1 = sum1+a[key][i]
sum2 = sum1+c[key][i]
}
sum1 = sum1 + a[key][idx[key]]
sum2 = sum2 + c[key][idx[key]]
line1 = sum1""line1"+"a[key][idx[key]]")"
line2 = sum2""line2"+"c[key][idx[key]]")"
print $1, $2, line1, $4, $5, line2
idx[key] = -1
}' inputFile inputFile
In this script, one ore more blanks are interpreted as field separators (FS="[ ]+"). In the output, fields are separated by a tab (OFS="\t").
Note that the script is called with two times inputFile as argument.
If your input really is a csv-file, then try exporting it with , as field separators and set FS=OFS=",".
Example output for the input given in the question:
2013 Cat.1 10 Structure1 Code1 34.10
2014 Cat.1 25 Structure1 Code1 254.24
2013 Cat.2 250 Structure1 Code1 2456.4
2014 Cat.2 234 Structure1 Code1 2345.9
2013 Cat.1 6 (5+1) Structure2 Code2 77 (59+18)
2014 Cat.1 9 (8+1) Structure2 Code2 141 (123+18)
2013 Cat.2 72 (64+8) Structure2 Code2 77 (59+18)
2014 Cat.2 81 (70+11) Structure2 Code2 141 (123+18)
This one-liner will do the job:
awk 'BEGIN{g=1;s="%4s %5s %-12s %10s %5s %-12s\n"} f{printf s ,$1,$2,$3+a" ("a"+"$3")",$4,$5,$6+b" ("b"+"$6")";f=0;g=0} /Structure2/{a=$3;b=$6;f=g;g=1} /Structure1/{printf s,$1,$2,$3,$4,$5,$6}' file
2013 Cat.1 10 Structure1 Code1 34.10
2014 Cat.1 25 Structure1 Code1 254.24
2013 Cat.2 250 Structure1 Code1 2456.4
2014 Cat.2 234 Structure1 Code1 2345.9
2013 Cat.1 6 (5+1) Structure2 Code2 77 (59+18)
2014 Cat.1 9 (8+1) Structure2 Code2 141 (123+18)
2013 Cat.2 72 (64+8) Structure2 Code2 77 (59+18)
2014 Cat.2 81 (70+11) Structure2 Code2 141 (123+18)
I added a formatting for the alignment, I've used 12 (%-12s) for the third and the sixth columns - you can increase it if the numbers go higher.

how to Combine two tables column in oracle?

Table 1:
CURRENCY CODE ER GUARANTOR ID G AMOUNT
USD 1.2986 117 750
AED 4.76976 117 5750
ZAR 11.4717 117 234
INR 70.676 117 1243
AMD 526.5823 117 500000
EUR 1 117 12435
ALL 139.63197 117 2000000
EUR 1 173 200000
EUR 1 217 20000000
INR 70.676 26 100000
AED 4.76976 43 1000000
EUR 1 53 10000
Table 2:
F AMOUNT
USD 1.2986 117 450
AED 4.76976 117 7900
INR 70.676 117 2237.4
ZAR 11.4717 117 140.4
AMD 526.5823 117 500000
EUR 1 117 6961
ALL 139.63197 117 2000000
EUR 1 173 20000
EUR 1 217 14000000
INR 70.676 26 300000
AED 4.76976 43 2000000
EUR 1 53 10000
Result:
CURRENCY CODE ER GUARANTOR ID G AMOUNT F AMOUNT
USD 1.2986 117 750 450
AED 4.76976 117 5750 7900
ZAR 11.4717 117 234 2237.4
INR 70.676 117 1243 140.4
AMD 526.5823 117 500000 500000
EUR 1 117 12435
ALL 139.63197 117 2000000
EUR 1 173 200000
EUR 1 217 20000000
INR 70.676 26 100000
AED 4.76976 43 1000000
EUR 1 53 10000
I want to combine Both table like i need all the column in table 1 and F AMOUNT column from table 2. how to achieve this?
Thanks in Advance.
use the below query
select t1.CURRENCY CODE
, t1.ER
, t1.GUARANTOR
, t1.ID
, t2.FAMOUNT
from table1 t1
, table2 t2
where t1.CURRENCY CODE=t2.CURRENCY CODE

Resources