я пытаюсь объединить два .txt в циклах, вот файл
mn@LeNOVO-220414-A:/mnt/c/Users/LeNOVO/Alnus$ ls
Alnus1.txt Alnus2.txt Alnus3.txt Alnus4.txt Bobi1.txt Bobi2.txt Bobi3.txt Bobi4.txt`
Я пытаюсь объединить Alnus1 и Bobi1 в новый файл с именем комбинация1.txt
Я новичок в bash и нуждаюсь в руководстве Вот мое неудачное испытание, пожалуйста, взгляните.
mn@LeNOVO-220414-A:/mnt/c/Users/LeNOVO/Alnus$ ls
Alnus1.txt Alnus2.txt Alnus3.txt Alnus4.txt Bobi1.txt Bobi2.txt Bobi3.txt Bobi4.txt
mn@LeNOVO-220414-A:/mnt/c/Users/LeNOVO/Alnus$ for name in *1.txt
> do
> other = "${name/1/1}"
> cat "$name" "%other" > "$combination1"
> done
other: command not found
-bash: : No such file or directory
other: command not found
-bash: : No such file or directory
Я пытаюсь объединить Alnus1 и Bobi1 в новый файл с именем комбинация1.txt
Дубликат stackoverflow.com/questions/28725333/…
редактировать: обновлены фрагменты в соответствии с советами в комментариях
Если вы точно знаете, сколько файлов, вы можете сделать это:
for i in {1..4}; do
cat "Alnus${i}.txt" "Bobi${i}.txt" > "combination${i}.txt"
done
Если вы этого не сделаете, вы можете использовать find . -name "Alus*.txt" | wc -l
, чтобы заставить его работать для любого количества файлов (при условии, что вы всегда начинаете отсчет с 1), например так:
for i in $(seq 1 "$(find . -name "Alnus*.txt" | wc -l)"); do
cat "Alnus${i}.txt" "Bobi${i}.txt" > "combination${i}.txt"
done
К сожалению, это имеет множество ошибок новичков и антипаттернов. Попробуйте shellcheck.net и посмотрите также stackoverflow.com/questions/65538947/…
Спасибо, теперь я использовал shellcheck.net и обновил примеры. Я не совсем понял ссылку на сообщение StackOverflow о построчной обработке файлов. Не могли бы вы уточнить, что я там пропустил?
Подсчет количества совпадений только для того, чтобы вы могли перебрать их снова, концептуально аналогичен. Просто for f in Alnus*.txt; do cat "$f" "Bob${f#Alnus}"
и т.д.
Вероятно, это то, что вы ищете:
for file in Alnus*.txt; do
suffix=${file#Alnus}
cat "$file" "Bobi$suffix" > "combination$suffix"
done
Значение ${file#Alnus}
— это значение переменной file
с удаленной в начале строкой Alnus
.
Попробуйте shellcheck.net, прежде чем обращаться за помощью к людям.
%variable
является конструкцией DOS и не имеет особого значения в Bash; ты имеешь в виду$variable