Это - информация об экране и дисплей. Когда Вы в рамках X сессий, необходимо найти что-то как :0
в $DISPLAY
.
Это число разломано на две части: первое число является числом дисплея: это обычно - группа устройств, которая содержит один или несколько экранов с одним или несколькими устройствами ввода данных. Экранное число дает определенный экран, являющийся в той группе.
$DISPLAY
синтаксис подобен хосту и спецификациям порта, которые распространены в сетях. Полностью изложенный в деталях, это смотрит что-то как hostname:display.screen
. Например, если бы Вы относились для отображения 2, экран 1 на example.com, то Вы использовали бы синтаксис example.com:2.1
.
:0
сокращение от "первого дисплея".
через Python3.
#!/usr/bin/python3
import csv
import sys
fil = sys.argv[1]
with open(fil) as f:
reader = csv.reader(f)
for i in reader:
l = []
for x in i:
if ';' in x:
m = x.split(';')
l.append(m)
else:
l.append(x)
for j in l[2]:
print(l[0]+','+l[1]+','+j)
Сохраните вышеуказанный скрипт в файле и назовите его как Script.py
. Запустите этот скрипт,
python3 script.py inputfile
Если вы хотите что-то быстрое, и знаете, что ваши данные имеют ровно три поля, как показано, то, возможно, что-то вроде
awk -F, -vOFS=, '{split(substr($3,2,length($3)-2),a,";"); for (i in a) print $1,$2,a[i];}' file.csv
Еще один Pythonic
Форма
#!/usr/bin/env python3
string= 'John,Doe,"Foo1;Bar1;Foo2;Bar2"'
result = [ string.split('"')[0] + x for x in string.split('"')[1].split(";")]
for i in result:
print(i)
Вывод:
$ ./test.py
John,Doe,Foo1
John,Doe,Bar1
John,Doe,Foo2
John,Doe,Bar2
Вот еще одно решение с использованием Python 2:
#!/usr/bin/env python2
input_string = 'John,Doe,"Foo1;Bar1;Foo2;Bar2"'
input_list = input_string.split('"')
common_input = input_list[0]
changed_input = input_list[1].split(';')
for i in changed_input:
print common_input + i
Выход:
John,Doe,Foo1
John,Doe,Bar1
John,Doe,Foo2
John,Doe,Bar2
#!/usr/bin/perl -n
if(/(.*?,)"(.*?;*?)"(.*)/){ my ($a,$b,$c)=($1,$2,$3) ;
for( split(/\s*;\s*/,$b )){
print "$a$_$c\n"
}
}
Вот некоторые sed
, которые вы можете использовать для этого:
sed 'H; 1h; g; x; s/^\n//
/^\([^"]*\)"\([^"]*".*\)/! d
s//\1/; x; s//\2/; :t
/\n\{0,1\}\([^;,"]*\)[";]\(.*\)/{ H
s//\2/; x; s//\1/p
s/\(.*,\).*/\1/; x
/^[^,"]*,\(.*\)/!bt
};s//\1/;x;s///;G;x;s///;x;D
Я знаю - это выглядит длинным. Но - пока буферы памяти sed
не уступают место под давлением - он должен обрабатывать любой текст в ваших полях, учитывая несколько (как я думаю) реалистичных предостережения:
"
не могут содержать экранированные кавычки "
полем в кавычках и "
кавычками должны быть равномерно соединены. ;
не могут содержать запятые, кавычки или ;
точки с запятой "
цитируемая часть. Вот пример:
sed ... <<\INPUT
John,Doe,"Foo1;Ba
r1;Foo2;Bar2",Jane,Doe,"Foo3;Bar3;Foo4;Bar4",All,Work,And,
No,Play,Makes,Jack,"A Superhero;
A
Very
Dull
Boy"
INPUT
Если ввести ...
выше со сценарием sed
в верхней части этого ответа вы должны получить следующий результат:
John,Doe,Foo1
John,Doe,Ba
r1
John,Doe,Foo2
John,Doe,Bar2
Jane,Doe,Foo3
Jane,Doe,Bar3
Jane,Doe,Foo4
Jane,Doe,Bar4
All,Work,And,
No,Play,Makes,Jack,A Superhero
All,Work,And,
No,Play,Makes,Jack,
A
Very
Dull
Boy