У меня была такая же проблема с Ubuntu 15.10 и mysql и я решил ее с помощью предыдущего ответа с небольшими отличиями.
Сначала я изменил /etc/security/limits.conf
, как указано выше.
Я добавил (ничего больше)
LimitNOFILE=infinity
в /lib/systemd/system/mysql.service
(небольшая разница в расположении)
и затем сделал
systemctl daemon-reload
xargs -I {} awk '$8 == "Yes" { title = title OFS $5 } END { print substr(FILENAME,1,length(FILENAME)-4), title }' {}.xls <combined.txt
Это использует xargs
для выполнения программы awk
для каждого имени, указанного в вашем файле combined.txt
.
Программе awk
даются любые имена, считанные из файла combined.txt
с добавлением .xls
в конце имени в качестве входного файла.
Программа awk
собирает данные из 5-го столбца для каждой строки, 8-й столбец которой равен Yes
. Затем эта строка печатается вместе с именем файла, в котором последние четыре символа (обрезаются суффиксом имени файла ).
Баш-скрипт:
#!/bin/bash
# read combined.txt line by line
while read -r line; do
# skip missing file ${line}.xls
[ ! -f "$line".xls ] && continue
# echo line and one space character (without newline)
echo -n "$line " >> out
# get 5th column if line ends with "Yes" and optional whitespace at end of line
# replace newline '\n' with space ' '
sed -nE 's/^\S+\s+\S+\s+\S+\s+\S+\s+(\S+).*\sYes\s*$/\1/p' "$line".xls | tr '\n' ' ' >> out
# add newline
echo >> out
done < combined.txt
в одну строку:
while read -r line; do [ ! -f "$line".xls ] && continue; echo -n "$line " >> out; sed -nE 's/^\S+\s+\S+\s+\S+\s+\S+\s+(\S+).*\sYes\s*$/\1/p' "$line".xls | tr '\n' ' ' >> out; echo >> out; done < combined.txt
Обратите внимание, что каждая строка в out
будет иметь один дополнительный пробел в конце строки.