Как найти все строки из одного файла в определенном столбце в нескольких других файлах?

У меня была такая же проблема с Ubuntu 15.10 и mysql и я решил ее с помощью предыдущего ответа с небольшими отличиями.

Сначала я изменил /etc/security/limits.conf, как указано выше.

Я добавил (ничего больше)

LimitNOFILE=infinity

в /lib/systemd/system/mysql.service (небольшая разница в расположении)

и затем сделал

systemctl daemon-reload
2
17.04.2019, 10:30
2 ответа
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. Затем эта строка печатается вместе с именем файла, в котором последние четыре символа (обрезаются суффиксом имени файла ).

0
27.01.2020, 22:27

Баш-скрипт:

#!/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будет иметь один дополнительный пробел в конце строки.

0
27.01.2020, 22:27

Теги

Похожие вопросы