Создание списка записей в двойных кавычках из строки без ограничений в Python - PullRequest
0 голосов
/ 29 января 2019

У меня есть строка, похожая на

date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47

Я хочу перебрать эту строку и сформировать что-то вроде этого

["date" ,"v3" ,"0.00" ,"0.00" ,"0.00" ,"0" ,"0" ,"7324.00" ,"0.00" ,"12278 12276","Tue Jan 29 09:36:47"]

Это я хочу достичь с помощью сценария оболочки, как я могу добиться этого?

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Использование Perl

$ export a='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47'
$ echo $a | perl -F"\s*\|\s*" -lane ' $_="\x22".$_."\x22" for(@F); print "[",join(",",@F),"]" '
["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"]
$
0 голосов
/ 29 января 2019

Похоже, что вы храните информацию в структуре списка [..], что является синонимом конструкции в Python, которая не легко реализуется в bash (которая имеет массивы) или Awk.

Вы можете просто сделать следующее

import json
str='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47'
split_str = str.split("|")
wo_spaces = [ str.strip() for str in split_str ]
print( json.dumps( wo_spaces ) )
["date", "v3", "0.00", "0.00", "0.00", "0", "0", "7324.00", "0.00", "12278 12276", "Tue Jan 29 09:36:47"]
0 голосов
/ 29 января 2019

Простой sed способ:

sed 's/\s*|\s*/","/g;s/^/["/;s/$/"]/'

Выход:

["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"]
0 голосов
/ 29 января 2019

1-е решение: Не могли бы вы попробовать следующее.

awk -v s1="\",\"" -v s2="\"" '{gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file

Вывод будет следующим.

["date ","v3"," 0.00"," 0.00"," 0.00"," 0"," 0"," 7324.00"," 0.00"," 12278 12276","Tue Jan 29 09:36:47"]

2-е решение: ИЛИ для решения проблем с неровными пробелами попробуйте выполнить следующее.

awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" '{gsub(/ \||\| /,s3);gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file

ИЛИ (выше не одна строка):

awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" '
{
  gsub(/ \||\| /,s3)
  gsub(/\|/,s1)
  $0="[" s2 $0 s2 "]"
}
1
'  Input_file

Вывод будет следующим.

["date" ,"v3" ,"0.00" ,"0.00" ,"0.00" ,"0" ,"0" ,"7324.00" ,"0.00" ,"12278 12276","Tue Jan 29 09:36:47"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...