Извлечение данных между строкой с двойными двойными кавычками в сценариях оболочки - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно извлечь данные из большого файла с двойными двойными кавычками в текстовый файл. Количество столбцов является фиксированным, но столбец будет отсутствовать, если данные недоступны в строке, например, acct_address и phne_nm, отсутствующие в 1-й строке, phne_num, отсутствующие во 2-й строке, acct_address, отсутствующие в 3-й строке

Данные в файле

<acc_details acct_no=""00000"" acct_nm=""John""/>
<acc_details acct_no=""00001"" acct_address=""109 BIRHN WAY "" acct_nm=""BARNS WY""/>
<acc_details acct_no=""00002"" acct_nm=""BILL BAR"" phne_nm=""123456""/>

Ожидаемый результат

acct_no,acct_address,acct_nm,phne_nm
00000,,John,
00001,109 BIRHN WAY,BARNS WY,
00002,,BILL BAR,123456

1 Ответ

1 голос
/ 10 апреля 2019

Возможно, это не самое элегантное решение, но оно должно применяться в большинстве случаев.Это может быть улучшено.

echo "acct_no,acct_address,acct_nm,phne_nm" > res
while read line ; do
    acct_no=$(echo $line | grep -Eoh 'acct_no="".*?""' | cut -d\" -f3)
    acct_nm=$(echo $line | grep -Eoh 'acct_nm="".*?""' | cut -d\" -f3)
    acct_address=$(echo $line | grep -Eoh 'acct_address="".*?""' | cut -d\" -f3)
    phne_nm=$(echo $line | grep -Eoh 'phne_nm="".*?""' | cut -d\" -f3)
    echo $acct_no,$acct_address,$acct_nm,$phne_nm >> res
done < file

grep и cut могут использоваться для изоляции частей линий с соответствующими шаблонами атрибутов.Просто имейте в виду, что любая двойная кавычка внутри значений атрибута может привести к сбою этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...