Предположим, что у вас есть файл с именем file
, который содержит строки с взаимно разными числами, разделенными пробелом -, и у вас есть набор из 6 чисел -, например. 38, 39, 40, 41, 42, 43 -, которые вы хотите найти в комбинациях из трех, так что строки, которые последовательно содержат три из этих чисел в случайном порядке, перечислены в результате поиска, вы можете использовать:
grep -P '((^|\s+)(38|39|40|41|42|43)(?=($|\s))){3}' file
который использует grep с регулярным выражением Perl (PCRE ).
Гарантируется ли, что повторяющиеся заголовки будут найдены только в последовательных файлах? С этим ответом я хотел справиться, если это не так:
#!/bin/bash
# Declare header_list[] to be an associative array
declare -A header_list
# Read the first line from every *.csv file in $1
# Each filename is added to the appropriate entry in header_list[]
for f in "${1:?}"/*.csv; do
echo "### Reading header from $f"
header_list[$(head -1 "$f")]+="${IFS}$f"
done
# Handle the list of files for each entry in header_list[]
group_id=1
for key in "${!header_list[@]}"; do
value="${header_list[$key]}"
groupfile="${2:?}/GROUP-${group_id}.csv"
echo "### Header: ${key}"
echo "### Group File: ${groupfile}"
# Echo the header as the first line of $groupfile
echo "${key}" > "${groupfile}"
# Skip the first line, but echo every other line from each file with this header
for file in ${value}; do
echo "# File: ${file}"
tail --lines=+2 "$file" >> "${groupfile}"
done
# Increment group_id
(( group_id++ ))
done
Сохранение в файл и запуск с двумя аргументами. :Каталог, содержащий исходные файлы, и выходной каталог.
Некоторые предостережения: