最新記事

シェルスクリプトの現在のシェルでプログラムを実行します。
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

A列とB列にスペースで区切られた値のリストを追加し、合計を表示します。
text-processing
awk

A列とB列にスペースで区切られた値のリストを追加し、合計を表示します。

この質問にはすでに答えがあります。: awkを使用して各列を合計して列名と列の合計を印刷するにはどうすればよいですか? (回答1個) 閉鎖3年前。 というファイルがありますfold.txt。各行には、スペースで区切られた2つの値があります。最初の値が列Aを表し、スペースの後ろの2番目の値が列Bを表す場合、列Aのすべての値と列Bのすべての値を加算し、各列の合計を別々に表示します。 ? 私は次のことを期待しています: $ cat fold.txt 100 500 200 300 700 100 出力: Total count Column A = 1000 Total count column B = 900

Admin

リスト内の特定のテキストを大文字に変換するには?
linux
text-processing
awk
sed

リスト内の特定のテキストを大文字に変換するには?

United""で始まる国のすべてのドライバ名を大文字で書きたいと思います。 たとえば、 ~から 20 [United Kingdom] Nigel Mansell 188 31 到着 20 [United Kingdom] NIGEL MANSELL 188 31 私が使用するコマンドは次のとおりです。 cat f1.txt | sed -r 's/[^ ]"United"\s+[A-Z]+[a-z]*]\s+[A-Z]+[a-z]*\s+[A-Z]+[a-z]*-?[A-Z]?+[a-z]?*/\U&/g' 完全なリスト: Rank Country Driver Races Wins 1 [United Kingdom] Lewis Hamilton 264 94 3 [Spain] Fernando Alonso 311 32 8 [United Kingdom] Jenson Button 306 15 11 [Netherlands] Max Verstappen 116 9 17 [United Kingdom] David Coulthard 246 13 20 [United Kingdom] Nigel Mansell 188 31 26 [United Kingdom] Jackie Stewart 100 27 27 [United Kingdom] Damon Hill 115 22 28 [Spain] Carlos Sainz Jr. 115 0 32 [United Kingdom] Graham Hill 177 14 37 [United Kingdom] Jim Clark 72 25 38 [Poland] Robert Kubica 97 1 41 [South Africa] Jody Scheckter 112 10 42 [New Zealand] Denny Hulme 112 8 47 [Switzerland] Clay Regazzoni 131 5 49 [Sweden] Ronnie Peterson 123 10 50 [New Zealand] Bruce McLaren 102 4 51 [Russian Federation] Daniil Kvyat 107 0 52 [United Kingdom] Eddie Irvine 147 4 54 [United Kingdom] Stirling Moss 72 16 58 [United Kingdom] John Surtees 111 6 59 [United States] Mario Andretti 128 12 60 [United Kingdom] James Hunt 92 10 63 [United Kingdom] John Watson 152 5 64 [Thailand] Alexander Albon 35 0 69 [United States] Dan Gurney 86 4 71 [United Kingdom] Mike Hawthorn 48 3 76 [United Kingdom] Lando Norris 35 0 78 [United Kingdom] Paul di Resta 59 0 80 [United States] Richie Ginther 52 1 85 [United States] Phil Hill 51 3 86 [United Kingdom] Martin Brundle 158 0 87 [United Kingdom] Johnny Herbert 161 3 89 [Sweden] Stefan Johansson 79 0 90 [New Zealand] Chris Amon 97 0 94 [United Kingdom] Tony Brooks 41 6 95 [Venezuela] Pastor Maldonado 95 1 99 [United Kingdom] Derek Warwick 147 0 100 [United States] Eddie Cheever 132 0 101 [Switzerland] Jo Siffert 97 2 103 [Russian Federation] Vitaly Petrov 57 0 104 [United Kingdom] Peter Revson 30 2 113 [United Kingdom] Peter Collins 36 3 114 [United Kingdom] Innes Ireland 52 1 119 [Sweden] Jo Bonnier 106 1 120 [Spain] Pedro de la Rosa 105 0 124 [United Kingdom] Mark Blundell 61 0 125 [United States] Harry Schell 63 0 127 [Sweden] Gunnar Nilsson 31 1 128 [Spain] Jaime Alguersuari 46 0 130 [United States] Jim Rathmann 12 1 132 [United Kingdom] Mike Hailwood 51 0 133 [Switzerland] Sebastien Buemi 55 0 135 [United Kingdom] Mike Spence 36 0 136 [South Africa] Tony Maggs 26 0 140 [United States] Masten Gregory 40 0 142 [United States] Sam Hanks 9 1 143 [United Kingdom] Piers Courage 27 0 145 [United States] Bill Vukovich 5 2 147 [United Kingdom] Tom Pryce 42 0 148 [United Kingdom] Roy Salvadori 48 0 149 [United States] Jimmy Bryan 9 1 153 [Sweden] Marcus Ericsson 97 0 159 [Switzerland] Marc Surer 82 0 160 [Netherlands] Jos Verstappen 106 0 161 [United Kingdom] Stuart Lewis-Evans 14 0 167 [United Kingdom] Mike Parkes 6 0 168 [United States] Rodger Ward 12 1 174 [United Kingdom] Jonathan Palmer 84 0 176 [Sweden] Reine Wisell 23 0 179 [United Kingdom] Jackie Oliver 50 0 180 [United States] Johnnie Parsons 10 1 181 [United Kingdom] Peter Arundell 13 0 185 [United States] Tony Bettenhausen 13 0 186 [United Kingdom] Cliff Allison 16 0 187 [United Kingdom] Richard Attwood 17 0 188 [United Kingdom] Peter Gethin 30 1 191 [Switzerland] Rudi Fischer 7 0 192 [United States] Johnny Thomson 9 0 194 [New Zealand] Howden Ganley 36 0 199 [United States] Troy Ruttman 8 1 200 [United States] Lee Wallard 2 1

Admin

スクリプト内でawkの動作が変わります。
shell-script
awk
inotify

スクリプト内でawkの動作が変わります。

RCTI-形式の注文番号フィールドと、注文番号を構成する英数字を含む「ベンダー請求書番号」で始まる行を含むテキストファイル「invoice.txt」があります。 次のコマンドを入力すると: awk '/Vendor Invoice No/ {gsub("RCTI-","",$4) ; print $4 ; exit}' /mnt/path/invoice.txt コマンドラインまたはbashのスクリプトで実行すると、REA-0130193/2などの請求書番号が返されます(RCTI-次の部分のみが必要です。この場合は正しいです)。各実行時に請求書ファイルの総数を処理するのではなく、新しいファイルのディレクトリに到着する新しいinotifywaitテキストファイルでのみ作業することを含む新しいスクリプトに統合しました。 inotifywait -m /mnt/path -e create -e moved_to | while read path action file; do i="$path$file" echo "$i" orderno="$(awk '/Vendor Invoice No/ {gsub("RCTI-","",$4) ; print $4 ; exit}' $i)" echo "$orderno">>test.txt done この方法も機能します。テキストファイルが到着すると、「test.txt」に新しい注文番号が生成されます。ただし、次のように呼び出してこのコマンドを含むスクリプトを実行した場合: ~/script.sh& or ~/script.sh & 他のスクリプトから、この場合私は対価として何も得られず、それは私を狂わせます。スクリプト内のスクリプトの場合は動作が停止しますが、端末またはバックグラウンドで直接実行すると正しく動作する理由を知っている人はいますか? 私をさらに混乱させることは、次のいずれかの形式を含む他のawkコマンドが同じscript.shで動作し続けることです。 paidamount="$(awk '/Payment Amt/ {gsub(",","",$11) ; print $11;exit}' $i)" echo "$paidamount">>test.txt 特殊文字に関する懸念のため、次の内容で別々のorderno.awkファイルを作成しました。 #! /usr/bin/awk -f /Vendor Invoice No/ {gsub("RCTI-","",$4) ; print $4 ; exit} そして電話してください orderno="$(~/orderno.awk $i)" 同じスクリプト内では動作は変わりません。 コマンドを次のように作成します。 orderno="$(awk '/Vendor Invoice No/ {gsub(/RCTI-/,"",$4) ; print $4 ; exit}' $i)" 私は違いを見ることができません。

Admin

シェルスクリプトからawkに値を渡す
bash
awk

シェルスクリプトからawkに値を渡す

この質問にはすでに答えがあります。: シェル変数をawkに/ pattern /として渡します。 (回答5個) 閉鎖3年前。 そのため、ファイルから読み取ったIPバンドルであるターゲット配列があります。今私のIPとsshコマンドの結果を含むファイルを分類しようとしています。しかし、それぞれに対して3つの異なるパスワードを試しているからです。 target と入力すると、2 つの拒否と 1 つのジョブ予約結果を受け取ります。だから私はジョブが特定の結果に対して予約されていることを確認してから「$ ip OK」を印刷し、そうでない場合は「$ ip failed」を印刷すると思いました。これが私が持っているものです。 #!/bin/bash for ip in "${targets_array[@]}" do cat "$output_file" | awk -v ip="$ip" '/$ip/&&/job/ {result="OK"} END { !result?result="failed":result=result;}' done 私がしたいことの擬似コード: 1. 必要なIPと「job」という単語が見つかるファイルのcat出力ファイルライン 2.1。見つかると、文字列変数に「$ ip OK」が追加され、印刷されます。 2.2 見つからない場合は、文字列変数 "$ip failed" に追加します。 3.変数に保存された結果で出力ファイルを上書きします。 ただし、デバッグモードで実行すると、値がawkスクリプトに渡されないことがわかります。どのように通過できますか? + awk -v ip= '/$ip/&&/job/ {result="OK"} END { !result?result="failed":result=result;}' 私が切っているファイル: unwantedString 124.131.8010 Permission denied, please try again. unwantedString 125.124.90.134 Permission denied, please try again. unwantedString 145.120.100.8 Permission denied, please try again. unwantedString 145.101.100.158 Permission denied, please try again. unwantedString 124.131.80.2 Permission denied, please try again. unwantedString 125.124.90.134 job 32 at 2020-12-16 23:30 unwantedString 145.120.100.8 Permission denied, please try again. unwantedString 145.101.100.158 job 27 at 2020-12-16 23:30 unwantedString 124.131.8010 Permission denied, please try again. unwantedString 125.124.90.134 Permission denied, please try again. unwantedString 145.120.100.8 Permission denied, please try again. unwantedString 145.101.100.158 Permission denied, please try again.

Admin

awkまたはsedを使用して同じフィールドがある場合、連続レコードを削除する方法は?
text-processing
awk
sed
perl

awkまたはsedを使用して同じフィールドがある場合、連続レコードを削除する方法は?

こんにちは、同じ番号を含む行を削除したいと思います。 awk、sed、またはperlでどのようにこれを達成できますか?たとえば、行4と5には両方とも12.7が含まれているので、これら2つの行を削除したいと思います。ありがとうございます。 入力サンプル start=0.1 end=2.5 start=8.7 end=12.7 start=12.7 end=16.7 start=16.7 end=25.2 start=25.2 end=48.7 start=48.7 end=60.1 start=66.2 end=69.2 start=69.2 end=72.2 start=72.2 end=75.2 start=75.2 end=78.2 予想出力: start=0.1 end=2.5 start=8.7 end=60.1 start=66.2 end=78.2

Admin

一部の文字列が非常に長い(最大45文字)問題が発生していますか? [コピー]
awk
gawk
bugs
mawk

一部の文字列が非常に長い(最大45文字)問題が発生していますか? [コピー]

この質問にはすでに答えがあります。: awkを使用して列を追加中に問題が発生しました。 (回答3個) 追加列を追加するときのAWK奇妙な出力動作 (回答1個) 印刷時にテキストの順序がめちゃくちゃです。 (回答3個) 閉鎖3年前。 filename次のファイルの最後の列と最初の列を抽出したいと思います。これを。 0.400 1.0 1.0 3.0 0.0 1.00 2.0 5.0 1.0 1.00 0.0 0.0 gs100_bs050_rcrs100_rarcinf_core_0400mpc3_df B 0.400 1.0 1.0 3.0 0.0 0.25 2.0 5.0 1.0 0.25 0.0 1.0 gs100_bs050_rcrs025_rarc100_core_0400mpc3_df C 0.03021516 4.0 1.0 4.0 0.0 1.75 2.0 5.0 1.0 1.75 -0.5 -0.5 data_c_rh4_rs175_gs10_ra0_b05n_10k awk '{print $NF, " ", $1}' filename得ることを期待しながら努力しました。 gs100_bs050_rcrs100_rarcinf_core_0400mpc3_df A gs100_bs050_rcrs025_rarc100_core_0400mpc3_dfB data_c_rh4_rs175_gs10_ra0_b05n_10kC しかし、私は得た。 A0_bs050_rcrs100_rarcinf_core_0400mpc3_df B0_bs050_rcrs025_rarc100_core_0400mpc3_df C_c_rh4_rs175_gs10_ra0_b05n_10k Mac(gawk v 5.0.0)とLinux / Ubuntuでも同じで、各行の先頭(mawk 1.3.3)には3つの余分なスペースがあります。私も試してみたawk '{printf("%s %s\n", $NF, $1)}' filenameが得た A100_bs050_rcrs100_rarcinf_core_0400mpc3_df B100_bs050_rcrs025_rarc100_core_0400mpc3_df Cta_c_rh4_rs175_gs10_ra0_b05n_10k Macで。最後の列の最長文字列は45文字です。だから私は試しましたが、 awk '{printf("%-50s %s\n", $NF, $1)}' filenameこれが返されました。 As050_rcrs100_rarcinf_core_0400mpc3_df Bs050_rcrs025_rarc100_core_0400mpc3_df Cgs10_ra0_b05n_10k 私の例は、awkのフィールドあたり1024文字と100のフィールド制限に準拠しています。これがバグでしょうかawk?

Admin

フォルダ内のファイルを繰り返し、列の先頭/末尾のスペースを削除します。
text-processing
awk
sed

フォルダ内のファイルを繰り返し、列の先頭/末尾のスペースを削除します。

この形式の複数のファイルを含むフォルダがあります> 1 Hello1 World1 Example1 2 Hello2 World2 Example2 ... 区切り記号は次のとおりです。\t 各列の先頭/末尾のスペースがある場合は、それらをすべて削除したいと思います。 はい 1 Hello1\s World1 \sExample1 ( \s) < はスペースを表し、予想される出力は次のようになります。 1 Hello1 World1 Example1 値にスペースを含めることができるため、スペースを完全に削除したくありません(例:)Hel lo。 また、新しいファイルを作成するのではなく、現在のファイルを編集したいと思います。

Admin

リンク形式を変更する sed または awk スクリプト
awk
sed

リンク形式を変更する sed または awk スクリプト

Web文書では、人々がhrefリンクから「を省略すると、エラーが頻繁に発生します。 例えば この問題を解決するために、マークダウンファイルで実行できるスクリプトを作成しました。 sed -i -e 's/ target=\"_blank\"/\"&/' docs.md これは上記の内容を操作し修正します。 ただし、aが見つからないことを確認しないため、"リンクが正しく作成されたら別のリンクを追加します。 また、hrefリンクの後には常に次のものが続くと仮定します。target="_blank" したがって、他の方法でアクセスして、a href=次のブロックが常に含まれていることを確認する方が" "良いかもしれません。 " "より多くの処理が必要な状況の例に href 以降の内容が含まれていることを確認して処理する場合、次の場合に処理が必要です。

Admin

日付フィールドに基づいてCSVファイルを分割する
awk

日付フィールドに基づいてCSVファイルを分割する

年に基づいてファイルを分割する方法私のファイルには2019年と2020年のデータがあり、以下にいくつかの行が記載されています。 hash,block_timestamp,addresses 1b8fb81b9c4db4cf3659d2553e7c1d5a4dac21400e331ea3deecdfa45e2eb7d7,2020-05-08 13:43:38 UTC,32UNEwo4UtXrD8xjAVDGapBcWQ9B7HBQNb daeac50f989f0d31bcc412ca47e2e082f7d0599d8e577a9a310f7ab4e9d474d2,2020-05-08 13:21:33 UTC,3BMEXPLQqB9rkR5SMhJdA4Xm98ntT5xuw8 56777decb012d60f36f9cd4b9acfe13215f670bbe192f261db21e64f98e212be,2019-05-08 13:39:39 UTC,1AMtkH4riMpxSe7YMbs6h2aaDXVdxnmMFy f5a1d52f013f1ee49a6cad971a5782c1c9905030d35ac28e23a2113fd1941421,2019-04-10 18:36:01 UTC,1LBBNap7kLswvgYbzmfLeskAfEMToiinkB 頑張った awk -F',' '{print >((substr($2,1,4)<=2020)?"2019":"2020")}' combined-out.csv 結果は2つの空のファイルです。この問題を解決する方法

Admin

「0」と最初の2つのフィールドを除くcsvファイルのすべてのテキストを1に変換するには?
text-processing
awk
command-line
bioinformatics

「0」と最初の2つのフィールドを除くcsvファイルのすべてのテキストを1に変換するには?

いくつかの大きな .csv ファイルがあり、このファイルをバイナリ (1 と 0) 形式に変換したいと思います。最初の2つのフィールドを除いて、テキストを含むすべてのセルは1になり、0は0のままです。 head Test.csv Iss1,1,0,0,Hsapiens-I34,0,0,0,Mmusculus-H01,0,0 Iss1,11,0,Scerevisiae-U09,Hsapiens-I05,0,0,0,0,0,0 Iss1,21,0,0,Hsapiens-I05,0,0,0,Hsapiens-I31,0,0 Iss1,31,0,0,Mmusculus-H13,0,0,0,0,0,Hsapiens-I31 Iss1,41,0,Scerevisiae-U09,0,0,0,0,0,0,Hsapiens-I21 Iss1,51,0,0,0,0,0,0,Scerevisiae-U25,0,Hsapiens-I21 Iss1,61,0,0,Hsapiens-I34,0,0,0,Mmusculus-H13,0,0 予想される結果は head Test.csv Iss1,1,0,0,1,0,0,0,1,0,0 Iss1,11,0,1,1,0,0,0,0,0,0 Iss1,21,0,0,1,0,0,0,1,0,0 Iss1,31,0,0,1,0,0,0,0,0,1 Iss1,41,0,1,0,0,0,0,0,0,1 Iss1,51,0,0,0,0,0,0,1,0,1 Iss1,61,0,0,1,0,0,0,1,0,0 ここで、ファイル内のすべてのテキストは1に変換されます。 誰もがこの問題を克服する方法についてアドバイスをすることができれば非常に感謝します。 ありがとう

Admin