слияние конкретных текстовых файлов в различных каталогах

У меня есть 6 каталогов. Каждый каталог включает 8 текстовых файлов. Эти текстовые файлы совместно используют тот же префикс. Я должен объединить эти текстовые файлы следующим образом;

Примите, первый текстовый файл в directory_1 содержит файлы, содержащие текст abc_1, directory_2 содержит файлы с текстом abc_2 и так далее. Объединенный текстовый файл для первых текстовых файлов должен быть в этой форме:

abc_1
abc_2
abc_3
..
abc_6

Второе, третье... и восьмые текстовые файлы также должны быть объединены с тем же правилом.

3
задан 1 December 2016 в 16:12

2 ответа

Ваши файлы должны быть поддающимися сортировке, так брать имена файлов в каждом конце каталога с числом от 1 до 8, такой как foo1, foo2... в одном каталоге и bar1, bar2... в другом и так далее, Вы могли использовать cat и a for цикл для конкатенации их:

for j in {1..8}; do cat directory_{1..6}/*$j > newfile$j; done

(никакая потребность "заключить в кавычки" переменную, которую мы знаем, является единственной цифрой), Это распечатает, в, например, newfile1, содержание

directory_1/foo1
directory_2/bar1
directory_3/baz1
...

независимо от того, что то содержание, и в newfile2 содержание directory_1/foo2, diectory_2/bar2 и т.д.

1
ответ дан 1 December 2019 в 15:52

Неявный метод (может перестать работать, если несвязанные файлы с именем файла, заканчивающимся _ и число, находятся в том же каталоге), который называет каждый объединенный файл согласно номеру документа:

DIRS_BASE=directory_
for ((FNUM=1; FNUM<9; FNUM++)); do
    cat ${DIRS_BASE}[1-6]/*_${FNUM} > merged_${FNUM}
done

(Более безопасное) использование явного метода списка префиксов, который называет каждый объединенный файл согласно номеру документа:

DIRS_BASE=directory_
PLIST=(abc def ghi jkl mno pqr)
NDIRS=${#PLIST[@]}
for ((FNUM=1; FNUM<9; FNUM++)); do
    PLIST_NUM=(${PLIST[@]/%/_$FNUM})
    cat ${PLIST_NUM[@]/#/$DIRS_BASE[1-$NDIRS]/} > merged_${FNUM}
done
3
ответ дан 1 December 2019 в 15:52

Другие вопросы по тегам:

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