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