Grep несколько файлов с несколькими уникальными словами - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь извлечь строки из ~ 1200 файлов. В данный момент у меня есть текстовый файл в следующем формате:

"1" "keyword1" "filename1"
"2" "keyword2" "filename2"
"3" "keyword3" "filename3"
"4" "keyword4" "filename4"
and so on. 

Что я хочу сделать, это проверить имя файла «n» на наличие строки, содержащей ключевое слово «n». Я предполагаю, что это можно сделать с помощью некоторого цикла в скрипте bash, как показано ниже

for (i in 1:n){ 
grep "dataframe[i, 2]" dataframe[i,3]}

но я действительно изо всех сил пытаюсь понять, как на самом деле запрограммировать это в скрипте BASH, как я привык использовать R.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Все, что вам нужно, это:

awk -F'"' 'NR==FNR{ARGV[ARGC++]=$6; word[$6]=$4; next} $0 ~ word[FILENAME]' file

Это легко сделать более надежным и / или более эффективным в зависимости от ваших невысказанных потребностей (например, какой вывод вы хотите, может ли один и тот же файл появляться несколько раз с разными словами, должно ли сравнение быть регулярным выражением или строкой, частичное или полное и т. д.).

0 голосов
/ 20 марта 2019

Попробуйте это:

#Iterate over the file, reading one line at a time
#For each line read 3 columns
while read -r col1 col2 col3; do
  #remove leading and trailing quotes (") with sed
  pattern=`sed -e 's/^"//' -e 's/"$//' <<<"$col2"`;
  file=`sed -e 's/^"//' -e 's/"$//' <<<"$col3"`;
  echo "Matches in $file:"
  #find matches with grep
  grep "$pattern" "$file";
  echo ""
done < list.txt

Добавьте любые аргументы, которые вы хотите grep, например -n для номеров строк.

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