Wiki хакеров удара имеет список функций удара и когда они были представлены: http://wiki.bash-hackers.org/scripting/bashchanges
Этот список не включает замену процесса, таким образом, потребовалось некоторое дальнейшее исследование. В соответствии с этой статьей, которая ссылается на журнал изменений, версия 1.13.5 имела рабочую замену процесса: http://www.quora.com/Which-version-of-bash-added-the-Process-Substitution-feature
Датой на записи журнала изменений является Sun 23 февраля 3:38:59 1992.
согласно Вашему примеру, любой каталог, который имеет "дубликаты", имеет дубликат, заканчивающийся в" (1)", таким образом:
for dir in ???\(1\)/; do
base=${dir%(*}
for i in 1 2; do
f=${base}_S1_L001_R${i}_001.fastq
echo "mv ${base}/$f ${base}/$f.bak"
echo "cat ${base}*/${f}* > ${base}/$f"
done
done
Удалите "эхо" s, когда Вы будете готовы
Там бесполезен для любого инструмента обработки текста кроме cat
, так как все, что Вы делаете с содержанием файла, должно связать их.
Мы запускаем в RootDir. Я предполагаю, что в NNN (K), K ≤ 999999999, и K записан без продвижения 0. Я создаю шаблоны с ([0-9])
, ([0-9][0-9])
, и т.д., чтобы связать NNN (9) перед NNN (10).
pattern_prefix='[0-9][0-9][0-9]([1-9]'
while [ ${#pattern_prefix} -le 13 ]; do
# Iterate over the NNN(K) directory where K has a certain number of digits
for dir in $pattern_prefix\); do
if ! [ -d "$dir" ]; then break; fi
base=${dir%\(*}
target=$base/$base
# If this is the first NNN(K) directory we meet for this NNN, create the base
if [ ! -d "$target" ]; then
mkdir "$target"
cp -p "$base/"*.fastq "$target"
fi
# For each file in NNN(K), determine the target file and append
for f in "$dir/"*.fastq; do
stem=${f##*/}; stem=${f#*_*_}
set -- "$target/"*_*_"$stem"
cat "$f" >>"$1"
done
done
pattern_prefix=$pattern_prefix'[0-9]'
done
pattern_prefix=*\([0-9]
если все имена файлов, содержащие открывающую скобку, имеют желаемую форму.
– Gilles 'SO- stop being evil'
09.10.2013, 17:54
Если я понимаю вопрос правильно, Вы хотите что-то вроде этого:
for D in ???
do
[[ -d $D?* ]] || continue
mkdir $D/$D
for F in $D/*
do
cat $D*/$F > $D/$D/$F
done
done
Это не принимает пробелов в каталоге имен файлов, и что все дублированные файлы появятся, по крайней мере, в каталоге с 3 символами. Если у Вас могло бы быть имя файла, которое находится только в 111 (1) каталоги, замена
for F in $D/*
с
for F in $( find $D* -printf "%f\n" | sort -u )
таким образом, Вы получите список уникальных имен в 111, 111 (1), и т.д.
cat
строка с${base}*
– glenn jackman 09.10.2013, 18:49