сопоставьте строку в двух столбцах, затем напечатайте count AWK

Если нет пробелов в файлах в каталоге:

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
cd "$SOURCE"
for file in $(ls -d./201*)
do
    echo "File: $file"
done

если вы не уверены, есть пробелы в списке каталогов или нет, сделайте это вместо этого:

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
cd "$SOURCE"
shopt -s nullglob
for filename in 201*;do
   if [[ ! -d "$filename" ]];then
      echo "$filename"
   fi
done
shopt -u nullglob

Я не понимаю, нужны ли вам имена файлов каталогов или нет, если нет, то это то, что работает.

Второе обычно является предпочтительным решением, когда вы не знаете, есть пробелы или нет, как мне кажется.

1
27.09.2019, 12:30
2 ответа
awk -F',' '$2 ~ /^Apple$/ {++count} $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

или, поскольку вам нужно точное совпадение, вместо~:

подойдет ==.
awk -F',' '$2 == "Apple" {++count} $3 == "Apple" {++count} END{print count}' Dataset.csv

Это увеличит count, если оно найдено в либо $2, либо $3.

Если вы хотите увеличить count, только если он найден в обоих, используйте:

awk -F',' '$2 ~ /^Apple$/ && $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2 == "Apple" && $3 == "Apple" {++count} END{print count}' Dataset.csv

или (объединение обоих полей для соответствия И строки x 2):

awk -F',' '$2$3 ~ /^AppleApple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2$3 == "AppleApple" {++count} END{print count}' Dataset.csv
2
27.01.2020, 23:22

Использование awk с разделителем полей, установленным в соответствии с шаблоном поиска:

awk -F'Apple' '{count+=NF-1}END{print count}' file

Переменная countувеличивается с количеством полей и печатается в конце файла.


Альтернатива, использующая GNU awk, необходимая для использования RS в качестве регулярного выражения (границы слова, спасибо @cas):

 awk -v RS='\\<Apple\\>' 'END{print NR-1}' file

Это просто проверяет, сколько записей NRнайдено в файле.

1
27.01.2020, 23:22

Теги

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