タグ付けされた質問 「awk」

パターン指向のスキャンおよび処理言語。

1
rsync出力から「ダイアログ」を使用してプログレスバーを作成する
rsync出力を「dialog --gauge」コマンドに入力できる方法でフィルタリング/リダイレクトする方法を探しているので、ファイル同期中に見栄えの良いプログレスバーを取得できます。現在、プロンプトで直接テストしているだけですが、(bash)シェルスクリプトでこれを行う予定です。 私はインターネットを見回し、細かく見つけましたが、それを機能させるための何かがまだありません (免責事項:これは完全に間違ったアプローチである可能性があり、リダイレクト/パイピングの怪物です) 私が現在まとめているもの: rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 最初に--progressオプションを指定した実際のrsyncコマンドがありますrsyncからの出力はawkにパイプされ、以下のawkフィルターを使用します。 { if (index($0, "to-check=") > 0) { split($0, pieces, "to-check=") split(pieces[2], term, ")"); split(term[1], division, "/"); …
16 linux  bash  scripting  awk  rsync 

2
awkのフィールドセパレータとして正規表現を使用するには?
でフィールドセパレータとして正規表現を使用しようとしていますawk。私の読書から、これは可能に思えますが、構文を正しく取得できません。 rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }' awk: cmd. line:1: { FS awk: cmd. line:1: ^ unexpected newline or end of string 考え?明らかでない場合の目標は、バージョン番号のないソフトウェアのリストを取得することです。

5
ファイル内の任意の場所に複数のキーワードを含むファイルを検索します
私は、ファイル内のどこにでも、探しているキーワードの完全なセットを含むディレクトリ内のすべてのファイルをリストする方法を探しています。 そのため、キーワードを同じ行に表示する必要はありません。 これを行う1つの方法は次のとおりです。 grep -l one $(grep -l two $(grep -l three *)) 3つのキーワードは単なる例であり、2つ、または4つなどの場合もあります。 私が考えることができる2番目の方法は次のとおりです。 grep -l one * | xargs grep -l two | xargs grep -l three 別の質問に登場した3番目の方法は次のとおりです。 find . -type f \ -exec grep -q one {} \; -a \ -exec grep -q two {} \; -a …

3
awk +最初のフィールドがLinux1の文字列で始まる場合にのみ行を出力
最初のフィールドがLinux1で始まる場合の行の印刷方法 例えば: echo Linux1_ver2 12542 kernel-update | awk '{if ($1 ~ Linux1 ) print $0;}' 最初のフィールドはLinux1で始まりますが、ターゲットは行を出力することです 行の例: Linux1-new 36352 Version:true Linux1-1625543 9847 Linux1:16254 8467563 備考-最初のファイルの前にスペースまたはTABを挿入できます


8
配列要素がすべてbashで等しいかどうかをテストするにはどうすればよいですか?
次の配列は、各Linuxマシンのディスク数を表しています 各単一アレイには、Linuxマシン上のディスクの数が含まれます。 echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 すべての配列の値が等しいことを識別する簡単な方法は何ですか? 良い状態: 4 4 4 4 4 4 4 4 悪い状態: 4 4 4 4 4 4 2 4 悪い状態: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 


5
列のタイムスタンプを日付に変換するにはどうすればよいですか?
これを含むファイルがあります: 1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 タイムスタンプをこの形式の日付に変換したい: 2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 どうやってやるの? 私はこれが機能することを知っています:(この質問perl -pe 's/(\d+)/localtime($1)/e'から)しかし、出力形式はです。Mon Nov 10 02:00:03 2014 このコマンドでタイムスタンプを目的の出力に変換できることはわかっていますdate -d@1415602803 +"%F %H:%M:%S"が、すべての引用符などのために、それをawk使用して動作させることはできませんでしたsystem("cmd")。

8
複数行のgrepを実行する方法
2行に表示されるテキストに対してgrepをどのように実行しますか? 例えば: pbsnodes Linuxクラスタの使用率を返すコマンドです root$ pbsnodes node1 state = free procs = 2 bar = foobar node2 state = free procs = 4 bar = foobar node3 state = busy procs = 8 bar = foobar 「フリー」状態のノードに一致するprocの数を判別したい。これまで「procの数」と「フリー状態のノード」を特定できましたが、それらをすべてのフリーprocを表示する1つのコマンドに結合したいと思います。 上記の例では、正解は6(2 + 4)になります。 私が持っているもの root$ NUMBEROFNODES=`pbsnodes|grep 'state = free'|wc -l` root$ echo $NUMBEROFNODES …


5
2つのファイルを区切り文字のトリプルパイプ記号「|||」で1行ずつマージします
2つの言語で同じ行数を持つ2つの並列ファイルがあり、これら2つのファイルを区切り文字で1行ずつマージする予定|||です。たとえば、2つのファイルは次のとおりです。 ファイルA: 1Mo 1,1 I love you. 1Mo 1,2 I like you. Hi 1,3 I am hungry. Hi 1,4 I am foolish. ファイルB: 1Mo 1,1 Ich liebe dich. 1Mo 1,2 Ich mag dich. Hi 1,3 Ich habe Durst. Hi 1,4 Ich bin neu. 予想される出力は次のとおりです。 1Mo 1,1 I love you. ||| …

2
大きなワードリストで重複を削除する最も速い方法は?
大きなワードリストを重複排除する必要があります。いくつかのコマンドを試して、こことここでいくつかの研究を行いました。そこでは、単語リストを重複排除する最も速い方法はawkを使用しているように見えることを説明しています。 awk-> O(n)?sort-> O(n log n)? しかし、これは真実ではないようだ。私のテスト結果は次のとおりです。 sort -u input.txt -o output.txt 実数0m12.446s ユーザー0m11.347s sys 0m0.906s awk '!x[$0]++' input.txt > output.txt 実数0m47.221s ユーザー0m45.419s sys 0m1.260s したがって、sort -uを使用すると3.7倍高速になります。どうしてこれなの?重複排除を行うためのさらに速い方法はありますか? ***********アップデート******** 誰かがコメントで指摘したように、私の単語リストはすでにある程度ソートされている可能性があります。この可能性を排除するために、このPythonスクリプトを使用して 2つのワードリストを生成しました。 List1 = 7 Mb List2 = 690 Mb 結果AWK: List1を リアル0m1.643s ユーザー0m1.565s sysの0m0.062s List2 実2m6.918s ユーザー2m4.499s sys 0m1.345s 結果SORT: List1 …
14 bash  awk  performance  sort 

3
シェルコマンドを使用してファイルから列または複数の列を削除するにはどうすればよいですか?
私のファイル、 ARCHIVE B1_NAME B2_NAME B3_NAME ELEMENT INFO_NAM WERT PROCID -------- -------- -------- -------- -------- -------- ---- ------ 15MinAvg AIRSS 33-GIS DMDMGIS1 I MvAvr15m 1123 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 P MvAvr15m 2344 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 Q MvAvr15m 4545 CP 15MinAvg AIRSS 33-GIS DMDMGIS2 I MvAvr15m 6576 CP 15MinAvg …


5
行の順序を維持しながら重複行を削除する
[root@server]# awk '!seen[$0]++' out.txt > cleaned awk: (FILENAME=out.txt FNR=8547098) fatal error: internal error Aborted [root@server]# 「サーバー」には、8ギガバイトのRAM + 16ギガバイトのスワップ、x> 300ギガバイトの空き領域、amd64、デスクトップCPUがあります。Scientific Linux 6.6。LOADを作成するために他に何も実行されません。数秒後にawkは異常終了します。out.txtは約1.6ギガバイトです。GNU Awk 3.1.7。 質問:行の順序を維持しながら重複行を削除するにはどうすればよいですか?大文字と小文字の区別も重要です。例:「A」と「a」は2つの異なる行で、保持する必要があります。ただし、「a」と「a」は重複しています。最初の1つだけが必要です。 答えは何でも構いません.. awkがこれに向いていない場合.. perl / sed ..問題は何でしょうか [root@server]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.