最新記事

特定の「検索」基準に一致するすべてのファイルの最初の行をどのように印刷できますか?
shell-script
text-processing
find

特定の「検索」基準に一致するすべてのファイルの最初の行をどのように印刷できますか?

.txt100バイトより長いすべてのファイルの最初の行を印刷したいです。これまでの基準を満たすファイルを収集しましたが、ファイルの最初のテキスト行を印刷する方法がわかりません。 find -size +100c -name "*.txt" それとも私が完全に間違った道を行っているのでしょうか?

Admin

データストリームの文字列をフィルタリングして画面に出力するためのシェルスクリプト
text-processing
tail
streaming

データストリームの文字列をフィルタリングして画面に出力するためのシェルスクリプト

ログファイルを簡単に追跡し、単一フィールドの出力を画面に印刷しようとしています。 私のLinuxシステムのログファイルは次のとおりです。 2022-10-21 16:00:08;areq_in=0;areq_qavg=0;areq_qmax=0;areq_sent=0;ares_out=0;ares_out_err=0;ares_out_ok=0;ares_qavg=0;ares_qmax=0;ares _recv=0;ares_tavg=0;ares_tmax=0;creq_out=0;creq_qavg=0;creq_qmax=0;creq_recv=0;cres_in=0;cres_qavg=0;cres_qmax=0;cres_sent=0;lic_rej=0 ;lic_use=0;mbr_from=0;mbr_to=0;mreject=0;mreject_conn=0;msys_recv=0;msys_sent=0; ログの各行は;区切りフィールドで構成され、ほとんどは「key = value」形式です。 だから私がしたいのは、creq_recv画面に「キー」名のフィールドを印刷することです。 誰かの修正からこのスクリプトをインポートしましたが、何かが欠けているようです。 #!/bin/bash creq_recv=$1 my_variable=`tail -f stats_2022102116.log | awk -F: -v creq_recv="$1" '$1 == creq_recv {$1=$1; print}' stats_2022102116.log` echo "$my_variable" 出力が空なので [root@priti ]$ ./chk_conn_log.sh [root@priti ]$ 値が何であれ、出力は画面に印刷する必要がありますcreq_recv。たとえば、次のように creq_recv=12 creq_recv=34 creq_recv=65

Admin

文字列をコマンド出力に置き換えるには?
text-processing
awk
sed

文字列をコマンド出力に置き換えるには?

hostname -i私が実行して次のような結果が得られたとしましょう。 root@linux:/# hostname -i 192.168.1.1 root@linux:/# 出力(IPアドレスのみ)をパイピングして、特定のファイルの特定の文字列をどのように置き換えることができますか? このコマンドの出力(たとえば、sedORを使用)を次の部分にパイプしたいと思います。awkmy_server_ip "server":"my_server_ip", "server_port":8388,

Admin

CSVファイルから名前で列を抽出する方法
text-processing
csv

CSVファイルから名前で列を抽出する方法

MAC(Unix)に一貫性のない列を持つ150を超えるCSVファイルがあります。たとえば、次のようになります。 プレートA ID 西洋の平地 移動する Eメール 補助携帯電話 名前 V V V V V V V V V V V V Bフィルム ID 西洋の平地 西洋の平地 西洋の平地 西洋の平地 西洋の平地 V V V V V V V V V V V V 表C うつ病 Eメール 移動する 名前 西洋の平地 うつ病 V V V V V V V V V V V V フォームD ID うつ病 うつ病 うつ病 移動する うつ病 V V V V V V V V V V V V 上記の各ワークシートに次の列がある場合は、新しいワークシートを派生する必要があります。 ID、名前、メール、携帯電話、SECONDARY_MOBILE 次に、CATを使用して新しくエクスポートしたワークシートを1つのワークシートにマージします。これにより、Oracle DBにデータをアップロードできます。 したがって、SHEET Dの場合、派生テーブルは次のようになります。 ID 名前 Eメール 移動する SECONDARY_MOBILE V V これがはっきりしていることを願っています。よろしくお願いします。

Admin

特定の文字列間の引用符の検索と追加
text-processing
awk
sed
csv

特定の文字列間の引用符の検索と追加

csvを使用すると、不要なカンマ( '、')が原因でcsvファイルが誤って表示され、不一致が発生します。 以下をご覧ください。 私のサンプルCSVファイル: 1|a,b|4 1|c,d|4 1|e,f|4 1|g,h|4 1|i,j|4 私が望む最終結果は次のとおりです。 1|"a,b"|4 1|"c,d"|4 1|"e,f"|4 1|"g,h"|4 1|"i,j"|4 引用符を追加した後、「|」を「」に置き換えると、私のCSVは期待どおりに機能します。 以下のコマンドを使用しましたが、期待どおりに提供されません。 sed -e 's/,/"&"/' file1.txt

Admin

bash:標準入力から文字列区切り文字まで読みます。
bash
text-processing

bash:標準入力から文字列区切り文字まで読みます。

ランダムバイトを含む2つのファイルがあるとし./delimiterます./data。 ./dataバイトシーケンスが最初に表示されるまで読んで除外したいと思います./delimiter。 Bashを使ってこれを行うにはどうすればよいですか? 例: コンテンツ./delimiter world コンテンツ./data helloworld 予想される結果: hello 類似/同等の質問: zsh: 標準入力から文字列区切り文字まで読み込みます。 注:read -d delim文字列ではなく単一文字区切り文字のみをサポートしているため、問題は解決されません。また、バイトをサポートしていない変数に結果を格納しますNUL。私は出力が欲しいですstdout。

Admin

awk は、あるファイルからヘッダーを読み取り、分割して別のファイルで使用します。
text-processing
awk

awk は、あるファイルからヘッダーを読み取り、分割して別のファイルで使用します。

私は列166以降の列ヘッダーを取得し、それを各後続の行に印刷するawkスクリプトを使用しています。 前任者。 col165 col166 col167 a 1 2 b 3 4 c 5 6 これになる-- col165 col166 col167 a col166|1 col167|2 b col166|3 col167|4 c col166|5 col167|6 しかし、私が作業しているファイルはかなり大きく(約160万行)、処理に約1.5時間かかります。 プロセスを高速化するために、大容量ファイルを100,000行に分割し、gnuを使用してparallel各ファイルを個別に処理する方法を考えました。しかし、ファイルのヘッダーを取得してヘッダーをインポートするために使用するスクリプトに問題が発生しました。ヘッダを指定するために別のファイルを使用したいと思います。それ以外の場合は、各分割ファイルにヘッダーを追加する必要があります(それ自体は面倒です)。 私が使用するコードは - awk 'BEGIN { FS="\t";OFS="\t" }; NR == 1 { split($0, headers); print; next } {for (i=166;i<=NF;i++) $i=headers[i] "|" $i } 1' input > output column_headersファイルを使用してタイトルを指定したいと思います。可能ですか? 次のコードを試しましたが、うまくいかず、コードが正しいかどうかはわかりません。 awk -v head='$(cat column_headers)' 'BEGIN{ FS="\t";OFS="\t" }; NR == 1 { split($head, headers); print; next } {for (i=166;i<=NF;i++) $i=headers[i] "|" $i } 1' input > output 私が何か間違っているような気がしますが、何なのかよくわかりません。私が受けることができるどんな助けにも感謝します。 編集:ありがとう。実際、長期的な犯人だったチェーンのもう一つの命令を逃した。 @Ole Tangeが述べたようにコマンドを使用しましたが、少し修正しました。 time cat input_1|parallel -k -q -j 24 --tmpdir tmp/ --block 900M --pipe awk -f culprit_script > output スクリプトはデフォルトで各フィールドを分割し、値に応じて削除/保持します。 最初のコマンドを実行するのに約15〜20分かかり、2番目のスクリプトは1時間かかりました。並列性と24スレッドを活用して7分で完了!最初のコマンドにも並列性を使用すると思います。 皆様のご意見やご提案ありがとうございます!

Admin

二重引用符間の文字列の抽出
text-processing
awk
sed
grep

二重引用符間の文字列の抽出

デフォルトモジュールはウィンドウ名を出力するので、現在アクティブなウィンドウクラスを表示するカスタムPolybarモジュールを作成しようとしています。 このコマンドを使用してウィンドウクラスを取得します。 xprop -id $(xdotool getactivewindow) WM_CLASS 次の出力を取得します。 WM_CLASS(STRING) = "kitty", "kitty" ただし、希望の出力は次のとおりです。 kitty どうすればいいですか?

Admin

文字列を含む行を見つけて、awkを使用してその行とテキストファイルのすべての後続の行を返します。
shell
text-processing
awk
command-line
scripting

文字列を含む行を見つけて、awkを使用してその行とテキストファイルのすべての後続の行を返します。

重複した内容についてお詫び申し上げます。しかし、私が経験した問題のほとんどは、行のフィールドから特定の値を取得するか、既知のファイルからtail最後の行を取得することに関連しています。nn先験的に。一致する値を持つ行を見つけて、その行と後続のすべての行のすべてのフィールドを取得します。詳細は次のとおりです。 データベースの検索に使用されるクエリ基準に関する情報を含む、さまざまな数のメタデータヘッダー行を含むオンラインデータベースから返されたデータファイルがあります。このヘッダー行の後にはきちんとしたデータフレームがあります。例: Query date: February 3, 2020, 1:34:57 PM Database: \n Search criteria: \n Geographic bounding box coordinates: -130.00 20.00; -130.00 24.00; -120.00 24.00; -120.00 20.00 Sample type: rocks > sediments > dust \n SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A 56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55 56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5 以下を使用して、データフィールド名を含む行を正常に見つけました。 SID=$(awk -F, '{ if ($1 == "SAMPLE ID") print NR }' data.csv) echo $SID9予想通りに返却 これで、その行のフィールド名とデータを含むすべての後続の行を取得して新しいファイルに送信したいと思います。つまり、入力ファイル全体を解析し、その行を新しいファイルにNR >= $SID送信したいと思います。 これは私が使用したコードですが、いくつかの行を除くほとんどすべてのデータを返します。目的のデータを取得する方法やデータを含む行を省略する理由を理解できません。 awk -F, -v r=$SID '{ if (NR >= $r) print $0}' data.csv > output.csv これが私の予想結果です。 SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A 56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55 56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5 どんな助けでもいいでしょう!明確でなければ、awkに完全に初めて触れたのです!つまり、良い学習入門資料へのリンクも歓迎します。

Admin

名前が特定の文字で始まるファイルから行を抽出する
text-processing
sed
regular-expression

名前が特定の文字で始まるファイルから行を抽出する

ここでは、次の列のリストを取得します。 59 LOUIS 1202 +1 60 FREDDIE 1201 +4 61 FINLAY 1200 -2 62 LEON 1137 +12 63 HARLEY 1132 +6 64 DAVID 1127 -1 65 MOHAMMAD1100 +6 66 REECE 1095 -1 67 KIAN 1090 0 68 KAI 1056 -6 69 KYLE 1030 -18 70 BRANDON 1011 -4 71 HAYDEN 1006 +5 72 ZACHARY 995 +10 73 KIERAN 973 -12 73 LUCA 973 -1 75 ASHTON 954 +4 76 BAILEY 939 -6 77 JAKE 913 +10 78 GABRIEL 910 +14 79 SAM 900 -2 80 EVAN 890 0 81 BRADLEY 847 -13 次のように文字「L」の行のみを抽出するにはどうすればよいですか? 73 LUCA 973 -1

Admin

別の列の最も早い日付に基づいてIDごとに1つのレコードのみを選択するにはどうすればよいですか?
text-processing
command-line

別の列の最も早い日付に基づいてIDごとに1つのレコードのみを選択するにはどうすればよいですか?

次のフィールドで構成される複数行を含むファイルがあります。商標: ID Code Date 1 XX 23/1/2018 1 XX 11/3/2021 2 XX 14/5/2011 2 XX 20/9/2013 3 XX 08/7/2014 3 XX 11/9/2016 3 XX 27/10/2018 ID列の日付が最も早い項目に基づいて各参加者の項目を維持したいと思いますDate。各参加者の日付は、早いものから遅いものの順にソートされます。 私が望む出力は次のとおりです。 1 XX 23/1/2018 2 XX 14/5/2011 3 XX 08/7/2014

Admin