最新記事

ある行で見つかった値を最初の行の特定のフィールドに一致する別の行に追加する
linux
bash
awk

ある行で見つかった値を最初の行の特定のフィールドに一致する別の行に追加する

あなたのすべてがうまくいくことを願っています! これが私が達成したいものです: 次の行があります。 2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.334 Sent bytes (2566) successfully 2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.398 Sent bytes (4301) successfully 2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.890 Sent bytes (1293) successfully 2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:40.123 Sent bytes (7285) successfully 内部の値を取得したい。インデックス名「WRITING」に一致する行に角かっこを追加し、「Sent bytes」に一致する行の末尾に追加します。バイトブラケットのマッチング。 たとえば、希望の出力は次のようになります。 2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.334 Sent bytes (2566) successfully 20220701_cfgsys_017507001635 2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.398 Sent bytes (4301) successfully 20220601_cfgsys_017507001635 2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.890 Sent bytes (1293) successfully 20220701_cfgsys_017507001635 2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:40.123 Sent bytes (7285) successfully 20220601_cfgsys_017507001635 角かっこ内の2つの値(バイト名とインデックス名)を取得する方法を知っています。 cat test.txt | grep "WRITING" | awk -F"[()]" '{print $2" "$4}' $2 = 括弧内のバイト値 $4 = 括弧内のインデックス名の値 ただし、必要な行に追加することはできません。次の行(「WRITING」の後ろ)で「Sent bytes」文字列を検索し、$ 2は「Sent bytes」行の$ 2と等しく、$ 4を追加する必要があります。 「すでにバイトを送る」行末で どんな助けでも大変感謝します! よろしくお願いします!

Admin

パターンと一致しない行にテキストを追加する
linux
awk
sed
mysql

パターンと一致しない行にテキストを追加する

INSERT INTO `db`.`table` VALUES ( 39741633 49302045 0 44 '{"CustomerName":"S","CustomerMobile":"8","CustomerEmail":"","VersionId":"5","CityId":"2","CampaignId":"1","InquirySourceId":"3","Eagerness":"-1","ApplicationId":"2","BranchId":"3","AssignedDealerId":"2","DMSInqNo":"45"}' NULL 0 '2021-11-09 19:11:50' NULL 1 29 NULL ); INSERT INTO `db`.`table` VALUES ( 39741635 49970365 0 30 '{"CustomerName":"A","CustomerEmail":"[email protected]","CustomerMobile":"9","VersionId":"6","InquirySourceId":"1","Eagerness":"-1","IsCorporate":"z","CampaignId":"8","BranchId":"3","ApplicationId":"1","Location":{"City":{"CityId":"1"},"Area":{"AreaId":"4"}},"CouponCode":null,"CwOfferId":"0","AssignedDealerId":"0","PinCode":""}' NULL 0 '2021-11-09 19:11:51' NULL 1 29 NULL ); binlogからこれらの挿入文を抽出しました。まったくそう見えません。いくつか変更しましたが、まだ輻輳状態です。これを実際の挿入ステートメントに変換する必要があります。すべての挿入ステートメントについて、2行目(INSERT INTO db. VALUES())の後のすべての行の末尾にカンマを追加する必要があります。tableこれは、11行目までの2行の後にカンマを追加してから、INSERT INTOの後に再起動して繰り返すことを意味します。 Googleでこれを見つけました。 sed '/INSERT/{n;n;n;n;n;s/$/,/}' teststring.txt-->挿入後、5行目にカンマが追加されます。問題は、6行目をもう一度実行すると sed '/INSERT/{n;n;n;n;n;n;s/$/,/}' teststring.txt、最初のSEDコマンドによって配置された古いコンマを置き換えます。 ファイルの外観は次のとおりです。 INSERT INTO `db`.`table` VALUES ( 39741633, 49302045, 0, 44, '{"CustomerName":"S","CustomerMobile":"8","CustomerEmail":"","VersionId":"5","CityId":"2","CampaignId":"1","InquirySourceId":"3","Eagerness":"-1","ApplicationId":"2","BranchId":"3","AssignedDealerId":"2","DMSInqNo":"45"}', NULL, 0, '2021-11-09 19:11:50', NULL, 1, 29, NULL ); INSERT INTO `db`.`table` VALUES ( 39741635, 49970365, 0, 30, '{"CustomerName":"A","CustomerEmail":"[email protected]","CustomerMobile":"9","VersionId":"6","InquirySourceId":"1","Eagerness":"-1","IsCorporate":"z","CampaignId":"8","BranchId":"3","ApplicationId":"1","Location":{"City":{"CityId":"1"},"Area":{"AreaId":"4"}},"CouponCode":null,"CwOfferId":"0","AssignedDealerId":"0","PinCode":""}', NULL, 0, '2021-11-09 19:11:51', NULL, 1, 29, NULL ); この目標をどのように達成できますか?

Admin

iproute2 ss出力からリスニングTCPポートを抽出する
text-processing
awk

iproute2 ss出力からリスニングTCPポートを抽出する

プロセス(例:apache2)がリッスンしているポートを見つけ、この(tcp)ポート番号のみをfile1.txtファイルに印刷したいと思います。 私が試したコマンドは次のとおりです。 $ ss -atpln | grep 'apache2' | awk -F':' '{print $2}' > file1.txt これは私の出力です(file1.txtで): 80 * 私の出力が「*」ではなくポート番号(80)であることをどのように確認できますか? OPに提供される重要な情報を追加するためにEd Mortonによって編集されましたコメント: 自分のシステムで次の順序をメモしてください。 $ ss -atpln | grep apache2 出力は次のとおりです LISTEN 0 511 *:80 *:* users:(("apache2",pid=55338,fd=4),("apache2",pid=55337,fd=4),("apache2",pid=856,fd=4))

Admin

連続したパターンを一致させて他のパターンの後に挿入する方法
text-processing
awk
sed

連続したパターンを一致させて他のパターンの後に挿入する方法

2行のファイルがあります。 1, output /test here 2, output /test here 私はこれを次のように変更したいと思います: 1, output /test 1 here 2, output /test 2 here 前の文字列を,この文字列の末尾にコピーします/test。 awkまたはを使用してこれをどのように実行できますかsed?

Admin

ファイルから行を削除
text-processing
awk
sed

ファイルから行を削除

私のフォルダにはたくさんのファイルがあります。 $ ls -hlS | head total 75M -rw-r--r-- 1 ubuntu ubuntu 511 Aug 3 16:27 NW_009517088.1.lst -rw-r--r-- 1 ubuntu ubuntu 478 Aug 3 16:27 NW_009539008.1.lst -rw-r--r-- 1 ubuntu ubuntu 471 Aug 3 16:27 NW_009386266.1.lst -rw-r--r-- 1 ubuntu ubuntu 471 Aug 3 16:27 NW_009411177.1.lst -rw-r--r-- 1 ubuntu ubuntu 451 Aug 3 16:27 NW_009514912.1.lst 各ファイルの内容は*.lst次のとおりです。 $ cat NW_009514912.1.lst rna-NisyCt036+ cds-YP_358756.1- rna-NisyCt037+ cds-YP_358757.1+ cds-YP_358758.1+ cds-YP_358758.1+ id-NisyCp117-1+ id-NisyCp117-2+ id-LOC104209938-1- rna-XM_009770987.1- rna-XM_009780247.1+ rna-XM_009783083.1+ rna-XM_009784022.1- rna-TRNAN-GUU+ *.lstで始まらない各ファイルの行を削除する方法はrna-XM_?

Admin

複数のキーワード間で段落を置き換える方法
awk
perl

複数のキーワード間で段落を置き換える方法

キーワード間の段落全体を変更しようとしています。 したがって: port: 6666 socks-port: 6699 redir-port: 6669 allow-lan: true mode: Rule log-level: info external-controller: 0.0.0.0:9090 dns: enable: true ipv6: false # listen: 0.0.0.0:53 # enhanced-mode: fake-ip nameserver: - 223.5.5.5 - 114.114.114.114 # - 'tls://dns.rubyfish.cn:853' #fallback: # - 'tcp://208.67.222.222:443' # - 'tls://1.0.0.1:853' # - 8.8.8.8 proxies: - type: ss server: test.com proxy-groups: - name:

Admin

awkを使用して少ないメモリを使用してファイルを分割する方法
awk

awkを使用して少ないメモリを使用してファイルを分割する方法

gzipを使用して圧縮されたnginxログイン36GBファイルがあります。この小さなファイルをメモリ不足なしで私が書く別のスクリプトの入力として使用できるように、このファイルをより小さなファイルに分割したいと思います。ファイルの最初の列にはIPアドレスが含まれており、特定のIPアドレスからのすべての要求は分割後に同じファイルに存在する必要があります。 現在達成すべきことは次のとおりです。 #!/bin/bash FILENAME=$1 NUM_FILES=$(($2)) PREFIX=$3 unpigz -c $FILENAME | awk -v NUM_FILES=$NUM_FILES -v PREFIX=$PREFIX \ '! ($1 in out) {out[$1] = (idx++ %NUM_FILES) } '\ '{ outfile= PREFIX"." out[$1] ".txt"; print | ("pigz >" outfile) ; next} ' すべてが期待どおりに機能しますが、メモリを使いすぎてコンピュータに空き容量が16GBしかないため、xGBより大きいファイルに分割することはできません。 この場合、どういうわけかメモリを無駄にすることができないのだろうか。

Admin

入力ファイルで複数のコマンドを実行し、それを新しい出力ファイルに文字列で囲む方法
shell-script
awk
sed
csv
string

入力ファイルで複数のコマンドを実行し、それを新しい出力ファイルに文字列で囲む方法

input.txtファイルから複数のコマンドを順番に実行し、新しい.csvファイルに出力したいと思います。すべてのコマンドは個別に実行されると正常に実行されますが、{&&または;として実行すると何も起こりません。 } 私のコマンドは次のとおりです。 cat input_file.txt > output_file.csv awk 'NR % 13 == 0' sed -i '1i id,surface area (mm^2),gray matter volume (mm^3),avg cortical thickness +-sd,mean curvature,gaussian curvature,folding index,curvature index,hemi,ROI' awk -F"/" '$1=$1' OFS="\t" sed -e 's/\s\+/,/g' awk '{ print $10 " " $0}' >> output_file.csv これらすべてのコマンドを実行し、前のコマンドの後に各コマンドを実行する方法を知っている人はいますか? とても感謝しています!

Admin

複数行条件がある場合 awk する方法
awk

複数行条件がある場合 awk する方法

私のログにはいくつかの問題があり、一致する条件がある場合は警告が必要です。 いくつかのログ条件は次のとおりです。 2019-07-20|20:25|sorry system error|183 2019-07-20|20:25|Internal Error|8 2019-07-20|20:25|System Busy|1 私の期待は、フィールドの場合は次の条件に警告を送信します$4 >= 100。print $0curl curl -X GET "http://x.x.x.x:5000/submit_fajar.php?msg=print $0+`hostname`+time_`date +%d%h%y_%H.%M.%S`" 次の条件を試しましたが、まだcurl使用方法を混乱させています。print $0 cat datafiles | strings | awk -F"|" '{if ($4 > 100)print ""$1","$2",please check have many error respond MFS",$3,"count :",$4;'}'' 助けてください ありがとう

Admin

従業員の一級と時給を計算するawkコマンドまたはスクリプト
linux
awk
files

従業員の一級と時給を計算するawkコマンドまたはスクリプト

複数の従業員を含むテキストファイルがあります。テキストファイルはこのスキームに従います。 寺名部門 20.00 毎日の賃金を計算するには、変数付きのawkコマンドが必要です。また、各フィールドをタブとドル記号で区切って、1時間あたりの毎日のレートと/ hrと/日の末尾のテキストを表示する必要があります。例えば 従業員名部門 $20.00/時間 $160/日 従業員名部門 $50.00/時間 $400/日 従業員名部門 $200.00/時間 $1600/日 また、すべての労働者の1時間あたりの賃金を合計して表示し、「労働者は1時間あたり合計889ドル(または総額)を稼ぐ」というテキストを表示する必要があります。 私は初めてawkに触れて、インターネット検索を試しましたが、どこから始めるべきかわかりません。

Admin