Я бы сделал в bash
{ echo -e "head1\thead2" ; cat output ; } > newoutput
по сравнению с ответом Романа Перехреста, он будет работать правильно даже для очень длинных файлов (он сначала загрузит файл в память, а затем выполнит эхо; также bash имеет имхо некоторую максимальную длину ввода)
El siguiente código debería funcionar:
#!/bin/bash
for (( x=7; x <= 65; x+=2 ))
do
if [ "$x" -ne 57 ] && [ "$x" -ne 59 ] && [ "$x" -ne 29 ] && [ "$x" -ne 53 ]; then
cd charged_$x
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so.
cd..
fi
done
-ne
en lugar de !=
, ya que estamos comparando números enteros. Su código tiene dos errores :El operador !=
necesita espacios a su alrededor, y el &&
debe estar entre pruebas individuales [... ]
.
En lugar de usar muchas pruebas individuales:
for (( x = 7; x <= 65; x += 2 )); do
case $x in
29|53|57|59) ;;
*)
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so "charged_$x"
esac
done
También he quitado la mitad inútil cd
.
[ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]
[
— это команда, она подчиняется тем же правилам, что и, скажем, ls
. &&
— это оболочка для условной группировки команд. В [ foo && bar ]
оболочка запускает команду [ foo
, и в случае успеха запускает bar ]
. Команда [
завершается ошибкой, так как она ожидает увидеть ]
в качестве своего последнего аргумента, поэтому вторая команда не запускается.
Однако специальный условный синтаксис [[.. ]]
поддерживает &&
внутри него, поэтому вы можете использовать [[ $x != 57 && $x != 59 &&... ]]
. Обратите внимание, что для этого по-прежнему требуются пробелы вокруг операторов. Обычный $x!=57
будет проверкой, чтобы увидеть, является ли $x!=57
непустой строкой, что всегда так, независимо от значения x
.
Или поставьте закрывающий ]
перед&&
:[ "$x" != 57 ] && [ "$x" != 59 ] &&...