Typically when people talk about null they refer to the ASCII 0 byte. It's a long sordid story, but it goes back to punchcards. If you were processing data on punchcards, you could make filler space by just not punching and holes - that's a null byte
it is \000
There's also the concept of a null string - which is an empty expansion. so printf %s ''
printf gets an argument there, but it is empty - the null string.
So I can do: printf '%s this still gets printed' ''
But a null byte, nowadays, is not a blank punchcard, it's an actual byte. Anyway, it is still forbidden in filenames. Only it and the pathname separator / share that distinction.
No, vice versa. Like I said, ls does dentries - so when it does a listing it typically only has to stat the containing directory. When it treats each of its arguments as a directory in its own right, it stats each one.
Well, you have to link through it. But still - it's there. It's number three:
Specified patterns shall be matched against existing filenames and pathnames, as appropriate. Each component that contains a pattern character shall require read permission in the directory containing that component. Any component, except the last, that does not contain a pattern character shall require search permission. For example, given the pattern:
search permission is needed for directories / and foo, search and read permissions are needed for directory bar, and search permission is needed for each x* directory.
If the pattern matches any existing filenames or pathnames, the pattern shall be replaced with those filenames and pathnames, sorted according to the collating sequence in effect in the current locale. If the pattern contains an invalid bracket expression or does not match any existing filenames or pathnames, the pattern string shall be left unchanged.
There's also the pattern matching notation thing there.
Still, the spec can be a little difficult to swallow sometimes.
I mean, it's a bit like a stereo manual.
You can also just do man sh or man bash to learn more. That's probably a good place to start.
@mikeserv Certainly. Short version: I was creating a bunch of files, and loading it into a db in parallel. The only problem is that I was creating and loading each file in pieces and loading each pieces of each file into the db directly. So, the runtime was dominated by the loading process.
This is sort of textbook moron. I really have to wonder what I was thinking. Ironically, the slower version is also significantly more complicated. Usually the optimized version is more complicated.
@mikeserv Well, dbs can handle parallel loads. That's not the problem. The problem is that doing repeated loads thousands of times is incredibly expensive. For one thing, one has to drop and load constraints, which of course gets more expensive as the db gets bigger.
@mikeserv Well, I'll try it with a pipe. There is a link somewhere. One sec.
In linux pipe the output of the files listing to psql. Make copy use the standard input:
cat /path_to/ys*.csv | psql -c 'COPY product(title, department) from stdin CSV HEADER'
Look for the equivalent in other OSs
Apache Hadoop is an open-source software framework for storage and large-scale processing of data-sets on clusters of commodity hardware. Hadoop is an Apache top-level project being built and used by a global community of contributors and users. It is licensed under the Apache License 2.0.
The Apache Hadoop framework is composed of the following modules:
Hadoop Common – contains libraries and utilities needed by other Hadoop modules.
Hadoop Distributed File System (HDFS) – a distributed file-system that stores data on commodity machines, providing very high aggregate bandwidth across the cluster...
@mikeserv Well, it's nice you had one teacher you had positive feelings about. I had an art teacher I got on quite well with, though she was quite eccentric. Though maybe part of the reason I liked her was because she was eccentric.
@Gnouc - You're already pretty well setup to gather it on a branch test anyway, since you've got the label. So... hang on, maybe I can come up with something if I stare at it....
@Gnouc - maybe that's not even the best way, maybe mine's too complicated... This could be a very good candidate for a paired address - a range address.
No. That does the opposite of what it should... damn...
ok, the branch thing...
That's wrong - I don't know why it worked - I guess just because of the second address.
Anyway - the first one needs to not complement
Anyway, for a line that starts with a alphabetic character, it pulls in the next if it's the last line, then if it can address a newline followed by a non alpha it selects everything in pattern space up to the last newline there and does a substitute on it - changing the last new line to a tab