|
|
|
| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
Stay one step ahead of the competition. Evaluate and give feedback
on some of the hottest web development tools on the market today.
Make your opinion heard! Click
Here
|
|
#1
|
|||
|
|||
|
Help needed in the following code!!!!!
Hi,
I need some help in the following question. I am trying to read from a file to create users but am stuck in reading the value in double quotes. Following is the file named myfile.txt I am trying to read and looks like.The values are separated by a single space and the one in double-quotes is a single value as it also contains spaces. One line represents one users information. alc0010 500 "Aaron Lee Conyers" /home/alc0010 /bin/bash ama0 2 "Test Al-ome" /ama0028 /usr/bin/bash The following is the code I am trying to use to read the values from the file line by line #################################### cat myfile.txt | while IFS=" " read value1 value2 value3 value4 value5 do ...... ################################### But the value3 is the whole value in double quotes, but the space between just take the first word as the value3 instead of the whole in double quotes. Can any one help me out in how to solve this problem and what if there is more than one space between the values. I'll really appreciate for the help. Thanks |
|
#2
|
|||
|
|||
|
This is not the most elegant solution, but it should work provided each input line conforms to the format of the examples you gave. Pipe your data file through this awk script, and then use IFS=":".
Code:
#!/usr/bin/awk -F\" -f
{
gsub(" ", ":", $1)
gsub(" ", ":", $3)
print $1 $2 $3
}
|
|
#3
|
||||
|
||||
|
or this
cat myfile.txt | perl -n -e '/([\d\w]+) (\d+) "(.*?)" (.[^ ]+?) (.*)/; print $3,$/;'
__________________
And you know I mean that. |
|
#4
|
|||
|
|||
|
Let the war of escalation begin!
Here is a C program which can handle quoted fields in any position; change the definition of DELIM to set the output delimiter.Code:
#include <sys/types.h>
#include <sys/uio.h>
#include <stdio.h>
#include <unistd.h>
#define DELIM ':'
#define BUFFER 1024
int main(void)
{
int i, insize, offset, quoted;
char in[BUFFER], out[BUFFER];
quoted = 0;
while ((insize = read(0, in, BUFFER)) > 0) {
offset = 0;
for (i = 0; i < insize; ++i) {
if (quoted) {
if (in[i] == '"') {
quoted = 0;
--offset;
continue;
}
}
else {
if (in[i] == '"') {
quoted = 1;
--offset;
continue;
}
if (in[i] == ' ')
in[i] = DELIM;
}
out[i - offset] = in[i];
}
write(1, out, insize - offset);
}
return 0;
}
|
![]() |
| Viewing: Dev Shed Forums > Operating Systems > UNIX Help > Help needed in the following code!!!!! |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|
|