最新記事

シェルスクリプトの出力からを削除する方法
bash
shell-script
shell

シェルスクリプトの出力からを削除する方法

がシェルスクリプト出力に表示されます。誰かが出力からこれらの特殊文字を削除する方法を助けることができますか? 注:出力をtxtファイルに保存し、メールで出力を送信します。

Admin

構文エラーポイント>>>。 <<< - シェルスクリプト
shell-script
shell

構文エラーポイント>>>。 <<< - シェルスクリプト

.csvファイルの列に名前が格納されているファイルのリストを開いて呼び出したい。 以下は、私のメタデータ.csvファイルのヘッダーと最初の行です。 Sample_name,file1,file2,i7_Index_Name,i7_Sequence,i5_Index_Name,i5_Sequence,Well,Set,PrimerF,PrimerR,Locus 18S-B-August-5-L2,MI_M06648_0305_001_UDP0001_i7---UDP0001_i5_18S-B-August-5-L2_R1.gz,MI_M06648_0305_001_UDP0001_i7---UDP0001_i5_18S-B-August-5-L2_R2.gz,UDP0001_i7,GAACTGAGCG,UDP0001_i5,TCGTGGAGCG,A01,1,TCGTCGGCAGCGTCAGATGTGTATAAGAGACAG,GTCTCGTGGGCTCGGAGATGTGTATAAGAGACAG,18S これは私のスクリプトです。 ステップ1:すべての名前(1つの名前、つまり1つのファイル/行)を格納するメタデータ.csvファイルの2番目の列を選択します。ステップ2:各ファイルを開きます。 COLNUM_FILE1=$( cat Desktop/output/fastqs_demultiplexed_for_DADA2/metadata.csv | cut -d ',' -f2) "${COLNUM_FILE1}" zsh: command too long: file1\nMI_M06648_0305_001_UDP0001_i7---UDP0001_i5_18S-B-August-5-L2_R1.gz\nMI_M06648_0305_001_UDP0002_i7---UDP0002_i5_18S-B-August-6-L1_R1.gz\nMI_M06648_0305_001_UDP0003_i7---UDP0003_i5_18S-B-August-6-L2_R1.gz\nMI_M06648_0305_001_UDP0004_i7---UDP0004_i5_18S-B-August-6-L3_R1.gz\nMI_M06648_0305_001_UDP0005_i7---UDP0005_i5_COI-A-June-4-L2_R1.gz\nMI_M06648_0305_001_UDP0006_i7---UDP0006_i5_COI-A-June-4-L3_R1.gz\nMI_M06648_0305_001_UDP0009_i7---UDP0009_i5_COI-B-June-4-L2_R1.gz FILE1=($(awk -F',' -v COLNUM=$COLNUM_FILE1 \ 'NR>1 {print $COLNUM }' "Desktop/output/fastqs_demultiplexed_for_DADA2/metadata.csv" \ sort | uniq)) この構文エラーが発生します(ドットによるようです)。 awk: syntax error at source line 1 context is >>> MI_M0667292_927_UPD922_i7-----UDP928_i5_18S-August-5-L2_R1. <<<< gz awk: bailing out at source line 1 awk: syntax error at source line 1 解決策はありますか? rq:私はMAC OS M1 Monterey 12.6を使用しています。

Admin

Linux シェルスクリプトのカスタムシナリオ
shell-script
ubuntu
remote

Linux シェルスクリプトのカスタムシナリオ

私はEthereumノードの起動設定を自動化したいと思います。私はシェルスクリプトの作成を開始し、このようにいくつかの問題に直面しました。 シナリオは次のとおりです。 チェーン構成ですべてのノードを初期化します。 $geth --datadir ./node1/data init .json $geth --datadir ./node2/data init .json $geth --datadir ./node3/data init .json ノードを起動します。 $geth --datadir ./node1/data --port 2001 (default authrpc.port 8551) $geth --datadir ./node2/data --port 2002 --authrpc.port 8552 $geth --datadir ./node3/data --port 2003 --authrpc.port 8553 (各コマンドはデーモンを起動します - 「常にバックグラウンドで」、完了するまで待つ必要はありません) すべてのノードをマスターノードに関連付けます。 $geth attach ipc:node1/data/geth.ipc $admin.nodeInfo.enode (reply would be something similar to "enode://64dccd02d5d1166cfb4913f0d0c164dff2b9c61fd55182461010569e15319c7ff5cb4dc8b502e441c38c80ae1b42c2cc95c7e170ed973bb0353d766669c5447c@195.178.22.21:2001?discport=39805") $geth attach ipc:node2/data/geth.ipc $admin.addPeer("enode://64dccd02d5d1166cfb4913f0d0c164dff2b9c61fd55182461010569e15319c7ff5cb4dc8b502e441c38c80ae1b42c2cc95c7e170ed973bb0353d766669c5447c@127.0.0.1:2001") すべてのノードについて繰り返す:各ノードは他のすべてのノードのピアに参照が必要です。既知の問題:https://github.com/ethereum/go-ethereum/issues (これはデーモンではありません。完了を待たなければならない「サーバー」へのリモートアクセスです。) 報酬コレクターを設定します。 $miner.setEtherbase() (完了を待っています) ノードマイナーを作成します。 $geth attach ipc:node3/data/geth.ipc $miner.start() $miner.stop() $eth.getBalance(eth.accounts[0]) (ここには「サーバー」にリモートでアクセスしてデーモンを実行した後、ノード(別名「サーバー」)との接続を切断できる組み合わせがあります。) これはこれまでの私のスクリプトです(助けてくれた@terdonに感謝します&): # !/bin/bash echo "Run existing geth nodes. Please make sure they has been create & configured first!" if ! command -v geth &> /dev/null then echo "geth command could not be found" exit else echo "geth has been found. continue shell script" fi geth --datadir ./node1/data --port 2001 geth --datadir ./node2/data --port 2002 geth --datadir ./node3/data --port 2003 最初の問題は、スクリプトがgethすべてのノードを並列に実行しないことです。geth上記のコマンドは、完了していないプロセスを開始し、プロセスのログ出力を表示します。geth次のコマンドは、前のコマンドが完了したときにのみ実行されます。すべて独立して実行する方法はありますか? 2番目の質問は、ステップ7でgeth attach ノードのコンソールを接続して開き、いくつかの情報を取得して入力する必要があることです。その他ノード快適。唯一のオプションは、一時ファイルを作成し、変数の値を入れてから、別のノードのコンソールから値を読み取ることです。まだ確認していませんが、正しく行う方法についてのあなたのアイデアに興味があります。 ここに別のメモがあれば、助けてくれてありがとう。ありがとうございます! 修正するコメントの質問に基づいて投稿します。 更新^2 2番目の問題に対する解決策は、geth JSコンソールなどの一時ファイルを使用しないでください。サポートしていないファイルの操作。考えられる解決策は、gethhttpを使用して実行中のノードにアクセスし、カールを使用して値を取得することですenode。 One console: $geth --http --http.port 2001 --http.api admin,personal,eth,net,web3 --datadir ./node1/data Another console: $curl -X GET http://127.0.0.1:8551 -H "Content-Type: application/json" --data '{"jsonrpc":"2.0", "method":"admin_nodeInfo"}' この時点で、curlコマンドは不明な理由で「トークンを失う」を返します。

Admin

サブディレクトリ名でディレクトリのファイル名を変更したいと思います。
linux
bash
shell-script

サブディレクトリ名でディレクトリのファイル名を変更したいと思います。

ファイル名にファイルのサブディレクトリ名を追加したいと思います。 以下はディレクトリツリーです。 ├── foo_nifti │ ├──anatomical │ │ ├──file_name.nii.gz ├──ba_nifti │ ├──anatomical │ │ ├──file_name.nii.gz これは私が使用するコマンドです: shopt -s globstar nullglob files=(*nifti/anatomical/*nii.gz) for pathname in *nifti/anatomical/*; do newname=${PWD}; mv "$pathname" "$newname"; done このコマンドは私が望むものを提供しません。ファイル名にファイルのサブディレクトリ名を追加する代わりに、私が存在するディレクトリへのパスをファイル名に追加します。 私が望む出力 ├── foo_nifti │ ├──anatomical │ │ ├──foo_nifti_file_name.nii.gz ├──ba_nifti │ ├──anatomical │ │ ├──ba_nifti_file_name.nii.gz ありがとうございます!

Admin

リモートコンソールが切断されたときにプログラムを実行して実行を続ける方法
linux
shell-script
raspberry-pi
raspbian

リモートコンソールが切断されたときにプログラムを実行して実行を続ける方法

Javaプログラムを実行したいのですが、Puttyを閉じても引き続き実行する必要があります。プログラムは私のRaspberry piで実行されており、完全に起動しますが、コンソールを閉じるとすぐにプログラムが停止します。 現在、私はshスクリプトとその中に次の行を使用してみました。 nohup java -jar /home/pi/Programms/PantaBot/PantaBot.jar > /var/log/logPantaBot.txt 2>&1 &

Admin

bash
shell-script
environment-variables
eval

"eval"で "env"コマンドを使用する

私がこれを持っているとしましょうscript.sh: env -i SOMEVAR=SOMEVALUE eval -- "$@" 私はそれを実行します: ./script.sh echo "\$SOMEVAR" 次のようになります。 env: ‘eval’: No such file or directory evalBashが組み込まれているので動作しないようです。 env私たちが一緒に働く方法はありますかeval?

Admin

awkを使用してcsvファイルの行を変更するように値を並べ替える
bash
shell-script
awk

awkを使用してcsvファイルの行を変更するように値を並べ替える

ここから質問ですcsvファイルの値の並べ替え 問題は、最初の列と一致する方法に従って5番目の列の値をソートしたいということです。 入力する: "DB Instance Identifier","Engine","Instance Type","MultiAZ","Reservation ID","State","Start Time","Reserved Engine","Reserved DB Instance Class" "alpha-db-dev","postgres","db.t4g.micro",false,"alpha-db-dev-26aug2022","active","2022-08-26","postgresql","db.t4g.micro" "alpha-db-prod","postgres","db.t4g.small",true,"alpha-db-prod-26aug2022","active","2022-08-26","postgresql","db.t4g.small" "alpha-db-staging","postgres","db.t4g.micro",false,"alpha-db-staging-26aug2022","active","2022-08-26","postgresql","db.t4g.micro" "beta-db-dev-primary","aurora-postgresql","db.t3.medium",false,"charlie-db-dev-8dec2021","active","2021-12-08","postgresql","db.t3.micro" "beta-db-prod-primary","aurora-postgresql","db.r5.xlarge",false, "beta-db-prod-replica","aurora-postgresql","db.r5.xlarge",false, "beta-db-staging-primary","aurora-postgresql","db.t3.medium",false, "charlie-db-dev","postgres","db.t3.micro",false, "charlie-db-prod-dms","postgres","db.m4.4xlarge",true, "charlie-db-prod-dms-replica","postgres","db.m4.4xlarge",false, "charlie-db-staging","postgres","db.t2.large",false, "charlie-db-staging-loadtest","postgres","db.m4.4xlarge",false, "charlie-kong-db-dev","postgres","db.t3.micro",false, "charlie-kong-db-prod","postgres","db.m4.large",true, "charlie-kong-db-staging","postgres","db.t2.small",false, "delta-db-prod","mysql","db.t3.small",true, "delta-db-recon-prod","mysql","db.t3.micro",false, "delta-db-staging","mysql","db.t3.micro",false, 希望の出力は次のとおりです。 "DB Instance Identifier","Engine","Instance Type","MultiAZ","Reservation ID","State","Start Time","Reserved Engine","Reserved DB Instance Class" "alpha-db-dev","postgres","db.t4g.micro",false,"alpha-db-dev-26aug2022","active","2022-08-26","postgresql","db.t4g.micro" "alpha-db-prod","postgres","db.t4g.small",true,"alpha-db-prod-26aug2022","active","2022-08-26","postgresql","db.t4g.small" "alpha-db-staging","postgres","db.t4g.micro",false,"alpha-db-staging-26aug2022","active","2022-08-26","postgresql","db.t4g.micro" "beta-db-dev-primary","aurora-postgresql","db.t3.medium",false, "beta-db-prod-primary","aurora-postgresql","db.r5.xlarge",false, "beta-db-prod-replica","aurora-postgresql","db.r5.xlarge",false, "beta-db-staging-primary","aurora-postgresql","db.t3.medium",false, "charlie-db-dev","postgres","db.t3.micro",false,"charlie-db-dev-8dec2021","active","2021-12-08","postgresql","db.t3.micro" "charlie-db-prod-dms","postgres","db.m4.4xlarge",true, "charlie-db-prod-dms-replica","postgres","db.m4.4xlarge",false, "charlie-db-staging","postgres","db.t2.large",false, "charlie-db-staging-loadtest","postgres","db.m4.4xlarge",false, "charlie-kong-db-dev","postgres","db.t3.micro",false, "charlie-kong-db-prod","postgres","db.m4.large",true, "charlie-kong-db-staging","postgres","db.t2.small",false, "delta-db-prod","mysql","db.t3.small",true, "delta-db-recon-prod","mysql","db.t3.micro",false, "delta-db-staging","mysql","db.t3.micro",false, Ed Mortonは、以前の質問でawkスクリプトを使用してこの質問に答えました。 BEGIN { FS=OFS="," } NR == FNR { id = $2 sub(/-[^-]+$/,"",id) vals[id] = $2 OFS $3 next } { print (FNR>1 ? $1 OFS vals[$1] : $0) } ,しかし、私が作業しているcsvファイルの値と一致するようにスクリプトの値を理解して変更しようとすると、上記のawkスクリプトが最初に比較を行うため、何もしないか、単に誤った値が表示されます。列1と2。しかし、今回は最初の列と5番目の列を比較したいと思います。その後、行全体(列5から9)が最初の列に揃えられます。私は何をすべきですか?私はまだ学んでいます。 編集:コンマ区切りの値を使用しているため、混乱を防ぐために入力データの値を変更しました。コードエディタを使用する代わりに、Excelでファイルを開き、そこから貼り付けるときに間違って貼り付けたようです。混乱させて申し訳ありません!

Admin

別のエイリアスと後者のエイリアスに二重引用符と一重引用符を含むwatchコマンドでエイリアスをどのように使用できますか?
linux
bash
shell-script
watch

別のエイリアスと後者のエイリアスに二重引用符と一重引用符を含むwatchコマンドでエイリアスをどのように使用できますか?

alias vov="scontrol -o show nodes | grep -e \"-lkeb\" -e \"-gpu\"| awk '{ printf(\"%-15s%-9s%-7s%-18s%-11s%-9s%s\n\", substr(\$1, 10), substr(\$4, 10), substr(\$5, 8), substr(\$9, 6), substr(substr(\$23, 12)/1024,0,5), substr(substr(\$24, 10)/1024,0,5), substr(\$38, 11))}' | awk '{printf(\"%-15s%-7s%-9s%-18s%-7s%-9s%50-s%2-s%9-s%9-s%9-s\n\", \$1, \$3, \$2, \$4, \$5, \$6, \"|\"\$7, \"|\", \$3-\$2, \$5-\$6, substr(\$4,length(\$4))-substr(\$7,length(\$7)))}' | awk '\$11 != 0' | awk 'BEGIN {print \"NodeName CPUTot CPUAlloc Gres MemTot MemAlloc AllocTres CPUAvail MemAvail GPUAvail CPU/GPU\"}{print \$0 FS \$9/\$11}'" 上記のコードを私のファイルに書くとうまく.bashrcいきます。 watch "scontrol -o show nodes | grep -e \"-lkeb\" -e \"-gpu\"| awk '{ printf(\"%-15s%-9s%-7s%-18s%-11s%-9s%s\n\", substr(\$1, 10), substr(\$4, 10), substr(\$5, 8), substr(\$9, 6), substr(substr(\$23, 12)/1024,0,5), substr(substr(\$24, 10)/1024,0,5), substr(\$38, 11))}' | awk '{printf(\"%-15s%-7s%-9s%-18s%-7s%-9s%50-s%2-s%9-s%9-s%9-s\n\", \$1, \$3, \$2, \$4, \$5, \$6, \"|\"\$7, \"|\", \$3-\$2, \$5-\$6, substr(\$4,length(\$4))-substr(\$7,length(\$7)))}' | awk '\$11 != 0' | awk 'BEGIN {print \"NodeName CPUTot CPUAlloc Gres MemTot MemAlloc AllocTres CPUAvail MemAvail GPUAvail CPU/GPU\"}{print \$0 FS \$9/\$11}'" 上記のコードをターミナル()に貼り付けても/bin/bash問題ありません。実際に見なければならないコードはvov。 しかし、いくつかの問題が発生しました。 watch vov私の端末()で動作させることはできません/bin/bash。 私のalias。.bashrc 私に割り当てられた(短いバージョン)はalias使用できません。watch vov.bashrc これら3つの問題を解決するのに役立ちますか?

Admin

diff:2番目のディレクトリで別のファイルを探す
shell-script
diff

diff:2番目のディレクトリで別のファイルを探す

次のファイルがあるとしましょう。 old/common-change/index.html new/common-change/index.html new/only-new/index.html old/only-old/index.html 出力はdiff -qr私が望むものに近いです。 $ diff -qr old/ new/ Files old/common-change/index.html and new/common-change/index.html differ Only in new/: only-new Only in old/: only-old ただし、ファイルのみにはnew/ファイル名が必要です。親ディレクトリだけではありません。を試しましたが、diff -qrN内の項目だけを簡単にフィルタリングすることはできませんold/。 $ diff -qrN old/ new/ Files old/common-change/index.html and new/common-change/index.html differ Files old/only-new/index.html and new/only-new/index.html differ Files old/only-old/index.html and new/only-old/index.html differ に含まれていますが、他のものを探したいので、に含まれているものだけをnew/削除したいと思いますold/。 diff出力を取得する唯一のファイルは次のとおりです。 new/common-change/index.html new/only-new/index.html 重要な場合は、最後のコミット以降にWebサイトリポジトリのどのページが変更されたかを知りたいと思います。以前のバージョンをにold/、現在のバージョンをにビルドしていますnew/。したがって、変更されたすべてのページでテストを実行したいのですが、削除されたページは無視したいです(存在しないページではテストを実行できないため)。

Admin

シェル変数を印刷すると、空の出力が生成されます。
bash
shell-script
variable-substitution

シェル変数を印刷すると、空の出力が生成されます。

次のプログラムがあり、$varプログラムの実行時間で埋められた変数を印刷したいと思います。echoただし、コンソールに出力するときはprintf値が空です。 プログラム: #!/bin/bash for n in 1 2 3 4; do my_time="$(time var=$(echo "scale=100; 4*a(1)" | bc -l))"; echo $var echo $my_time printf "Value of PI is :%s\n" $var done 出力: real 0m0.003s user 0m0.000s sys 0m0.000s Value of PI is : real 0m0.004s user 0m0.000s sys 0m0.000s Value of PI is : real 0m0.004s user 0m0.000s sys 0m0.000s Value of PI is : real 0m0.004s user 0m0.000s sys 0m0.000s Value of PI is : 問題は何であり、どのように解決しますか?

Admin

bash - ディスクに書き込むことなく複数のバックグラウンドコマンドの出力をキャプチャできますか?
bash
shell-script

bash - ディスクに書き込むことなく複数のバックグラウンドコマンドの出力をキャプチャできますか?

並列化する複数のパイプラインを含むスクリプトがあります。現在は次のとおりです。 result1=$(pipeline | number | one) result2=$(pipeline | number | two) result3=$(pipeline | number | three) printf 'Result 1: %s\n' "$result1" printf 'Result 2: %s\n' "$result2" printf 'Result 3: %s\n' "$result3" 私はこれをしたい: result1=$(pipeline | number | one) & result2=$(pipeline | number | two) & result3=$(pipeline | number | three) & printf 'Result 1: %s\n' "$result1" printf 'Result 2: %s\n' "$result2" printf 'Result 3: %s\n' "$result3" ただし、割り当てはサブシェルで行われるため、これは機能しません。 ディスクの出力ファイルをリダイレクトできます。 pipeline | number | one > result1 & pipeline | number | two > result2 & pipeline | number | three > result3 & wait printf 'Result 1: %s\n' "$(

Admin