Я добавил следующую строку в ~ / .profile
Она устанавливает переменную DBUS_SESSION_BUS_ADDRESS. Это решило проблему для меня.
eval `dbus-launch --sh-syntax`
Вы можете сделать это таким образом, создав команды "на лету":
grep -f list_file data_file | sed -e "s/^\([^ ]*\).*/echo '&' >> \1;/" | sh
Вы можете создать справочную таблицу (или хэш) из list_file
, например, используя ассоциативный массив в awk
:
awk 'NR==FNR {list[$1]=1; next} $1 in list {print > $1".txt"}' list_file data_file
Результаты будут помещены в файлы 100_fullA.txt
, 100_fullB.txt
и так далее.
Вот решение с использованием Bash:
#!/bin/bash
while read pointer; do
filename="$(echo $pointer | cut -d ' ' -f 1)"
if grep $filename list_file > /dev/null; then
echo $pointer >> output/"$filename".txt
fi
done < data_file
Вот разбивка по строкам:
Строка 3 - это начало используемого цикла while чтобы просмотреть файл_данных.
Строка 4 повторяет строку, прочитанную в текущей итерации. Затем строка передается в cut, который вырезает первую часть строки, используя пробел в качестве разделителя. Затем результат присваивается переменной с именем "filename".
Строка 5 использует команду grep, чтобы определить, существует ли ранее определенное значение в list_file. Если grep удается найти значение (вернуть статус 0), сценарий переходит к строке 6. Если grep ничего не находит (возвращает статус 1), сценарий запускает цикл заново.
Строка 6 отображает всю строку для вывода / "$ filename" .txt.
Строка 7 закрывает оператор if.
Строка 8 закрывает цикл, и на нее ссылаются data_file.
Другие важные примечания: