最新記事

シェルスクリプトでawk構文エラーを修正するには?
awk
scripting
syntax

シェルスクリプトでawk構文エラーを修正するには?

特定のファイルのデータの合計を抽出して別のファイルに印刷する2つのコードを持つスクリプトがあります。 2番目のコードは、欠落しているデータポイントの合計を別のファイルに抽出します。最後に、2つの出力ファイルが3番目のファイルに統合されます。 3つのコードはすべて個別に実行されたときに機能します。処理するファイルの量が多いため、1つのスクリプトファイルに自動化したいと思います。 bash シェルを実行します。 Colavg.sh ファイルに実行権限が付与されました。これを単一のスクリプトで実行しようとすると、次のエラーが発生します。 awk: cmd. line:1: ./Colavg.sh awk: cmd. line:1: ^ syntax error awk: cmd. line:1: ./Colavg.sh awk: cmd. line:1: ^ unterminated regexp #!/bin/awk awk -F ',' 'NF==4{count++} END {print "missing: "count}' County029-CO-0023-T0000JD.out > avg.out; awk -F ',' '$4==-999{c999++}; END{print "missing: "c999}' County029-CO-0023-T0000JD.out > avg1.out; cat avg1.out avg.out >> County029-CO-0023-T0000JD-avg.out

Admin

ローカルAIXサーバーから2つのパラメーターを渡しながら、リモートLinuxサーバーに存在するシェルスクリプトを実行したいと思います。
linux
bash
shell-script
scripting
aix

ローカルAIXサーバーから2つのパラメーターを渡しながら、リモートLinuxサーバーに存在するシェルスクリプトを実行したいと思います。

ローカルスクリプトを実行し、2つのパラメータ渡しを使用してリモートtest.shLinuxシステムに接続しようとしています。リモートサーバーに接続した後、渡された2つの引数を使用して内部的に呼び出されるPythonスクリプトをssh実行したいと思います。スクリプトをtest1.shリンクして実行できません。test1.sh 現在の状況を助けることができる人がいますか?使用されるコマンドは次のとおりです。 ローカルtest.shファイル: #!/bin/bash ssh testusername@remoteserever cd /home/tibco ./test1.sh "$1" "$2" Test1.shスクリプト: #!/bin/bash cd /usr/lib/python2.7/site-packages/fuzzywuzzy python testargs.py "$1" "$2"

Admin

シェルスクリプトを使用してPython環境に入り、いくつかのPythonコマンドを実行して通常の端末に戻る方法
bash
shell-script
scripting
programming
bourne-shell

シェルスクリプトを使用してPython環境に入り、いくつかのPythonコマンドを実行して通常の端末に戻る方法

申し訳ありません。タイトルがはっきりしない場合があります。私の疑いの完全な説明は次のとおりです。以下のシェルスクリプトを作成しており、上記の出力を期待しています。 #!/bin/bash python3 print("Hello World") exit() echo "The execution is completed" 私が期待する出力は、python3インタプリタに行き、コマンドを実行する必要があり、print手動exit()で実行するexit()と、コマンドを実行した後にインタプリタが終了してからコマンドを実行することですただし、実行後echoはそれほど機能しません。python3python3インタプリタを入力しましたがprint実行されませんexit()。 >>> python3に正しく入ってから、Pythonインタプリタを手動で終了するまでそのまま残ります。 予想される結果を得るにはどのような変更が必要ですか? 次の質問:Hello worldPythonインタプリタまたは他の出力から生成された出力をbash環境にインポートし、bashスクリプトで使用できますか? 2. pythonコマンドを実行するために指定した方法は他のツールでも機能しますか?

Admin

Systemd サービスは変更をディスクに保存しません。
ubuntu
scripting
echo
tee
systemctl

Systemd サービスは変更をディスクに保存しません。

keychron.service起動するたびにパラメータをオーバーライドする単純なファイルを作成しました。 [Unit] Description=The command to make the Keychron K2 work [Service] Type=oneshot ExecStart=/bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode [Install] WantedBy=multi-user.target このスクリプトは私のキーボードをパッチするために使用され、残念ながら動作0し/sys/module/hid_apple/parameters/fnmodeません。問題を解決するために私がしたことは次のとおりです。 小切手fnmodeは1 thekenu:~ $ cat /sys/module/hid_apple/parameters/fnmode 1 以下を使用して再起動し、再起動がkeychron.service成功systemctl statusしたことを確認します。 thekenu:~ $ sudo systemctl restart keychron.service thekenu:~ $ systemctl status keychron.service ● keychron.service - The command to make the Keychron K2 work Loaded: loaded (/etc/systemd/system/keychron.service; enabled; vendor preset: enabled) Active: inactive (dead) since Wed 2020-07-22 06:33:13 PDT; 3s ago Process: 28778 ExecStart=/bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode (code=exited, status=0/SUCCESS) Main PID: 28778 (code=exited, status=0/SUCCESS) Jul 22 06:33:13 thekenu-XPS-15-9560 systemd[1]: Starting The command to make the Keychron K2 work... Jul 22 06:33:13 thekenu-XPS-15-9560 echo[28778]: 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode Jul 22 06:33:13 thekenu-XPS-15-9560 systemd[1]: Started The command to make the Keychron K2 work. fnmodeになると予想されますが、0まだ1 thekenu:~ $ cat /sys/module/hid_apple/parameters/fnmode 1 ExecStart次のコマンドを実行してください。keychron.service thekenu:~ $ /bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode 0 それは.fnmodeしかし、私はそれが何をすべきかを0入力しているようです。keychrone.service thekenu:~ $ cat /sys/module/hid_apple/parameters/fnmode 0

Admin

sedコマンドとcurlコマンドを使用してWeb URLから特定の文字列を抽出する方法
awk
sed
scripting
xml

sedコマンドとcurlコマンドを使用してWeb URLから特定の文字列を抽出する方法

Linuxサーバーの使用 次のデータを生成するURLがあります。 ご覧のとおり、各AP番号は異なり、最初の2文字も異なる可能性があるため、他のURLではAPがBR AD CSである可能性があります。すべてのAP番号のみを含むリストを抽出して生成するコマンドを作成する必要がありますが、AP部分はすべての文字を抽出できる必要があり、数字部分のみがすべての数字を受け入れる必要があり、抽出するには重複項目も削除する必要があります。リストからAP。 これまでに、次のシェルスクリプトを作成しました。 echo 'ID,User,HostName,Application,DateTime,Value' curl -k -s 'https://testurl' コマンドの最後にパイプを追加し、awk、sed、または grep を使用する必要があります。すべてのAP番号を抽出し、重複したAP番号を削除し、すべてのAP番号のリストを作成する必要があります。しかし、APという文字も動的で、アルファベットの2文字に変更できることを覚えておいてください。 次のawkコマンドを試しました。 /usr/bin/curl -k -s https://example.com:18080/seriessnapshot?substringSearch=OpenFin%20Memory | awk -F".AP" '{print $2}' | awk -F. '{print $1}' | sort | uniq ただし、これは次のように返します。 717958 717961 717962 717977 717980 717982 717996 718397 718685 718954 719045 719051 719257 719262 719265 719432 719488 719821 719905 719906 720203 720455 720467 720911 721548 721569 721732 721737 数字の最初の2文字(2文字かもしれません)は返されません。 awkコマンドで数字の前の2文字を許可してから、任意の数字を受け入れ、列全体を印刷するように指示する方法を知っていますか?

Admin

TCLexpectでAWKを使用すると発生する問題
linux
awk
scripting
tcl

TCLexpectでAWKを使用すると発生する問題

TCK / TK unixコマンドでAWKコマンドを使用するのに問題があります。 var=`awk -v var1="^$line" -F "|" '$1~var1{print $1 }' sort-address-name-ip.txt | awk -v var2="$line$" '$0~var2'` 私は次のように使います: set var5 [exec /usr/bin/awk -v var1={^$line} -F {|} {$1~var1{print $1 }} sort-address-name-ip.txt | /usr/bin/awk -v var2={$line$} {$0~var2}] 私のスクリプト: #!/usr/bin/expect set file [ open /home/gcngov/script/practice/tcl/policy-unique_single_line-src-dst-ip.txt] while {[gets $file line] != -1} { puts $line set file1 [open /home/gcngov/script/practice/tcl/sort-address-name-ip.txt] set var5 [exec /usr/bin/awk -v var1={^$line} -F {|} {$1~var1{print $1 }} sort-address-name-ip.txt | /usr/bin/awk -v var2={$line$} {$0~var2}] puts $var5 } close $file 出力: ~/script/practice/tcl$ expect -d while-file.sh expect version 5.45 argv[0] = expect argv[1] = -d argv[2] = while-file.sh set argc 0 set argv0 "while-file.sh" set argv "" executing commands from command file while-file.sh 10.13.210.212 missing close-bracket while executing "set var5 [" ("while" body line 5) invoked from within "while {[gets $file line] != -1} { puts $line #set var [exec /usr/bin/awk -v var1="^$line" -F "|" $1~var1{print $1 } sort-address-name-ip.txt | awk..." (file "while-file.sh" line 3)

Admin

ping用のbashスクリプトの作成
linux
bash
scripting
ping

ping用のbashスクリプトの作成

こんにちは。次のコマンド ping -c 4 -i "IP"を3回実行するbashスクリプトが必要です。各Pingは10分間隔で実行する必要があり、3回失敗した場合にのみ電子メールが送信されます。助けてください? 前任者。 ping -c 4 -i X.X.X.X 実行タイプ:ping最初にすべてのパケットが失われた場合は、10分間待ってからpingコマンドを再実行してください。それでも失敗した場合は、最後のpingコマンドを実行してください。 #!/bin/bash HOSTS="X.X.X.X" pingtest(){ for myHost in "$@" do ping -c 4 -i 5 $HOSTS && return 1 done return 0 } if pingtest $HOSTS then # 100% failed echo "Server failed" | mail -s "Server Down" [email protected] fi しかし、これを3回繰り返し、パケット損失が失敗した後に電子メールを送信する方法は何ですか?ありがとう

Admin

共有要素(bash / awk)に基づいて行をマージする
bash
awk
scripting

共有要素(bash / awk)に基づいて行をマージする

次のファイルがあります。 a3 v2c v5 a7 a9 v2c v1c a3 a7c 希望の出力(各行に重複なし): a3 a7c a9 v1c v2c a7 v5 私が望むのは、少なくとも1つの要素を共有する行をマージすることです。行2では、両方の要素が一意であり、行はそのまま(並べ替えられた順序で)出力されます。 1行目は、「v2c」を3行目と共有し、「a3」を4行目と共有するため、これら3つの行が結合してソートされます。共有要素は別の列に存在できます。 大容量ファイル(200,000行)の場合、コードは非常に遅くなります。 Lines=$(awk 'END {print NR}' $1) bank=$1 while [ $Lines -ge 1 ] do echo "Processing line $Lines" awk -v line=$Lines 'NR == line' $bank | awk NF=NF RS= OFS="\n" | sort | uniq > Query.$Lines k=0 while [[ $k != 1 ]] do if [[ $k != "" ]] then grep -f Query.$Lines $bank | awk '{gsub(/\t/,"\n")}1' | awk '{gsub(/ /,"\n")}1' | sort | uniq > Query1.$Lines grep -f Query1.$Lines $bank | awk '{gsub(/\t/,"\n")}1' | awk '{gsub(/ /,"\n")}1' | sort | uniq > Query2.$Lines grep -f Query2.$Lines $bank | awk '{gsub(/\t/,"\n")}1' | awk '{gsub(/ /,"\n")}1' | sort | uniq > Query3.$Lines k=$(diff Query2.$Lines Query3.$Lines) if [[ $k != "" ]] then mv Query3.$Lines Query.$Lines fi else awk NF=NF RS= OFS=" " Query3.$Lines >> $1.output.clusters grep -v -f Query3.$Lines $bank > NotFound.$Lines bank=NotFound.$Lines k=1 fi done rm Query* Lines=$(( $Lines - 1 )) done exit find . -maxdepth 1 -type f -size 0 -delete rm NotFound.* Query.* Query1.* Query2.* Query3.* 私はbashやawkを使うよりシンプルで効率的なソリューションがあると思います。よろしくお願いします!

Admin

増加するディレクトリのファイルを1つのディレクトリにマージする方法
bash
shell
scripting
rename
pattern-matching

増加するディレクトリのファイルを1つのディレクトリにマージする方法

次のパターンに従うディレクトリ構造があります。 - Dir 01 (Disc 1) \ - Dir 01 (Disc 1).iso - Dir 01 (Disc 2) \ - Dir 01 (Disc 2).iso - Dir 01 (Disc 3) \ - Dir 01 (Disc 3).iso - Dir 02 (Disc 1) \ - Dir 02 (Disc 1).iso - Dir 02 (Disc 2) \ - Dir 02 (Disc 2).iso - Dir 02 (Disc 1) (A) \ - Dir 02 (Disc 1) (A).iso - Dir 02 (Disc 2) (A) \ - Dir 02 (Disc 2) (A).iso 私の目標は、次のような構造で終わることです。 - Dir 01 \ - Dir 01 (Disc 1).iso - Dir 01 (Disc 2).iso - Dir 01 (Disc 3).iso - Dir 02 \ - Dir 02 (Disc 1).iso - Dir 02 (Disc 2).iso - Dir 02 (A) \ - Dir 02 (Disc 1) (A).iso - Dir 02 (Disc 2) (A).iso これらのディレクトリを繰り返し、ファイル名を一致させ、すべてを適切な場所に移動する方法が必要であることを知っていますが、スクリプトを作成する方法はわかりません。どんなアドバイスも本当にありがとうございます。

Admin

シェルスクリプトの現在のシェルでプログラムを実行します。
shell
ssh
awk
scripting
zsh

シェルスクリプトの現在のシェルでプログラムを実行します。

.ssh設定を解析し、fzfを使用してエントリを選択し、そのホストに接続できる小さなシェルスクリプトを作成しました。 #!/bin/bash set -o nounset -o errexit -o pipefail list_remote_hosts() { choice="$(cat $HOME/.ssh/config | awk -v RS= -v FS=\\n -v IGNORECASE=1 ' { ip = "" alias = "" id_file = "" username = "" port = "" for (j = 1; j <= NF; ++j) { split($j, tmp, " ") if (tmp[1] == "Host") { alias = tmp[2] } if (tmp[1] == "Hostname") { ip = tmp[2] } if (tmp[1] == "IdentityFile") { id_file = tmp[2] } if (tmp[1] == "User") { username = tmp[2] } if (tmp[1] == "Port") { port = tmp[2] } } if (ip || alias && alias != "*") { if (port == "") { port = "22" } print "ssh " username "@" ip " -i " id_file " -p " port } } ' | fzf)" "$($choice)" } list_remote_hosts これはうまくいきますが、現在シェルの所有権を付与するのに問題があります。接続後、スクリプトはフリーズします(sshがサブシェルで起動されたようです)。たとえば、終了を入力し、ssh コマンドが終了すると出力を表示できます。 端末でsshコマンドを実行するのと同じ動作を得るためにスクリプトを実行すると、現在のシェルに自動的に所有権を付与したいと思います。 && zsh追加や使用evalなど、さまざまな方法を試しましたが、execどちらも機能しませんでした。どうすればいいですか?

Admin

複数の個別ジョブに1つの入力ファイルを使用する方法
shell
scripting
memory
images
imagemagick

複数の個別ジョブに1つの入力ファイルを使用する方法

ファイルを読み取り、さまざまなパラメータを使用して複数のタスクを実行し、最終的に各出力を別々のファイルとして保存したいと思います。 現在、私は以下のコードスニペットに示すようにこれを行います。これは実際に画像を変更することなく各反復で画像を読み取る。大きな画像(ここでは400 MB)の場合、速度は非常に遅くなります。メモリが十分に大きくてメモリにロードしてメモリから一度だけ処理しても大丈夫です。しかし、どうすればいいのかわかりません。 ImageMagick以外のシェルにはありません。 ImageMagickこれを行うための基本的な方法はありますか? メモリマッピングファイルシステムにファイルを一度コピーし、以下のスクリプトを使用するのが最も簡単ですか? #!/bin/sh FILE=foo.tif i=65;END=80;STEP=1 while [ $i -le $END ]; do convert $FILE -threshold ${i}\% ${i}.png & i=$((i+$STEP)) done もしシェル部分POSIX規格を維持します。編集:取得したコアを活用するためにバックグラウンドでサブプロセスを開始しました。

Admin