Что делает эту проблему обработки текста -сложной или необычной, так это то, что столбцы должны обрабатываться по отдельности.
Это немного хак, но, похоже, работает:
#!/bin/sh
rm -f newfile
for column in 1 2 3 4 5; do
cut -f "$column" file |
perl -ne 'chomp;$nl = ((tr /"/"/ % 2 == 0) ? "\n" : " "); print $_, $nl' |
sed -e 's/[[:blank:]]*$//' -e '/^[[:blank:]]*$/d' |
{ if [ -f newfile ]; then
paste newfile -
else
cat
fi
} >newfile.tmp
mv newfile.tmp newfile
done
Сценарий предполагает, что входной файл называется file
, и он создаст файл с именем newfile
(, используя имя файла newfile.tmp
для временных данных ). Кроме того, предполагается, что столбцы правильно разделены табуляцией -.
Он извлекает столбцы с разделителями табуляции -один за другим из исходного файла с cut
. Каждый отдельный столбец проходит через короткий сценарий Perl :
chomp;
$nl = ( ( tr /"/"/ % 2 == 0 ) ? "\n" : " " );
print $_, $nl;
Это подсчитывает количество двойных кавычек в каждой строке и выводит строку с добавленным символом новой строки, если строка содержит четное количество двойных кавычек. Если количество кавычек нечетное, вместо этого будет добавлен пробел в конце строки (, таким образом объединяя строки в кавычках, которые охватывают строки ). Это хакерский способ сделать это.
sed
выполняет некоторую очистку, удаляя пробелы в конце строк и удаляя пустые строки.
Затем я paste
эти новые данные в качестве новой вкладки -разделил столбец в newfile
(, сначала выведя в newfile.tmp
, а затем переименовав этот файл ). cat
выполняется только для самого первого столбца, когда newfile
еще не существует.
С заданными входными данными, при условии, что столбцы правильно разделены табуляцией -,это создаст следующую вкладку -файл с разделителями:
"column1" "column2" "column3" "column4" " column5"
"DATA" "THIS CONTAIN NEWLINE" "DATA" "THIS CONTAIN NEWLINE" "DATA"
Вкладки заменены вертикальной чертой -символы (, чтобы показать, где столбцы начинаются и заканчиваются):
$ tr '\t' '|' <newfile
"column1"|"column2"|"column3"|"column4"|" column5"
"DATA"|"THIS CONTAIN NEWLINE"|"DATA"|"THIS CONTAIN NEWLINE"|"DATA"
На картинке показана конфигурация nvidia, а не выбор драйвера! Вы должны переключить драйверы, см. в программе «Драйверы» :