как я хочу получить эту строку из файла log.txt - PullRequest
0 голосов
/ 07 марта 2012

формат log.txt:

;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name
0,0,32kB,8192,"Normal","Yes",0,"FFS"
1,0,128kB,19046,"Normall","No",0,"Dev_Cache"
2,0,64kB,305244,"Normalll","Yes",1,"0W24SWKT"

или другой формат:

;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name
0,0,32kB,8192,"Normal","Yes",0,"FFS"
1,0,128kB,19046,"Available","No",0,"Dev_Cache"
2,0,64kB,305244,"Normal","Yes",1,"0W24SWKT"

ниже мой шаг:

iffs.sed
/Bootable/{
n;
s/^.*[0-9],\"([a-zA-Z]+)\",.*$/set abc=\1/p;
}
1. sed -nrf iffs.sed log.txt
result: set abc=Normal
2. sed "2d" log.txt |sed -nrf iffs.sed
result: set abc=Normal or Available
3. sed "2,3d" log.txt |sed -nrf iffs.sed
result: set abc=Normal

Не могли бы вы помочь простым способом? Windows OS и Winpe 3.0 среды. и я хочу получить этот результат "set abc2 = Normal; установите abc3 = Normal или Available; установите abc4 = Normal"

Ответы [ 3 ]

1 голос
/ 07 марта 2012
[ghoti@pc ~/tmp]$ cat data 
;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name
0,0,32kB,8192,"Normal","Yes",0,"FFS"
1,0,128kB,19046,"Available","No",0,"Dev_Cache"
2,0,64kB,305244,"Normal","Yes",1,"0W24SWKT"
[ghoti@pc ~/tmp]$ cat doit.awk 
#!/usr/bin/awk -f

BEGIN {
  FS=",";
  ind=ARGV[1];
  ARGV[1]="";
}

$1 == ind {
  gsub(/"/, "", $5);
  print $5;
}

[ghoti@pc ~/tmp]$ ./doit.awk 2 data
Normal
[ghoti@pc ~/tmp]$ ./doit.awk 1 data
Available
[ghoti@pc ~/tmp]$ 

И если ваши индексы гарантированно не повторяются в файле, вы можете поставить nextfile после print $5, чтобы ускорить процесс.

1 голос
/ 07 марта 2012

В Python:

for line in open('log.txt'):
    print 'abc=' + line.split(',')[4]
0 голосов
/ 07 марта 2012

Это может работать для вас:

sed '1d;=;s/[^"]*"\([^"]*\).*/\1/' log.txt | sed 'N;s/\n/=/;s/^/set abc/'
set abc2=Normal
set abc3=Available
set abc4=Normal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...