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

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

5
シェルスクリプトで2番目のファイルを最初の列と比較し、2番目のファイルから重複行を削除する
例を挙げて質問します。2つのファイルがあります。 ファイル#1: 118D FC300_R5_TP FX.B 32775 2112 6 2038 6 2112 0 118E FC300_R5_TP FX.B 32775 2136 7 2065 6 2136 0 118F FC300_R5_TP FX.B 32775 2124 6 2064 6 2124 0 1190 FC300_R5_TP FX.B 819210 814632 99 814609 99 814632 0 1191 FC300_R5_TP FX.B 819210 104100 13 103714 13 …

5
一意の識別子で2つのファイルを結合する
約12900エントリと4400エントリの2つのファイルがあり、それらを結合したいと思います。ファイルには、世界中のすべての陸上気象観測所の位置情報が含まれています。最大のファイルは隔週で更新され、小さいファイルは年に1回程度更新されます。元のファイルはここにあります(http://www.wmo.int/pages/prog/www/ois/volume-a/vola-home.htmおよび http://weather.rap.ucar.edu/surface/ station.txt)。私が持っているファイルは、いくつかのawk、sed、およびbashスクリプトが混在しているため、すでに操作されています。このファイルを使用して、Unidataから無料で入手できるGEMPAKパッケージを使用してデータを視覚化します。最大のファイルはGEMPAKで動作しますが、完全な機能では動作しません。これには結合が必要です。 ファイル1には、気象観測ステーションの位置情報が含まれています。最初の6桁は、ステーションの一意の識別子です。さまざまなパラメーター(ステーション番号、ステーション名、国コード、緯度経度、ステーション標高)は、ライン内の位置によってのみ定義されます(タブはありません)。 060090 AKRABERG FYR DN 6138 -666 101 060100 VAGA FLOGHAVN DN 6205 -728 88 060110 TORSHAVN DN 6201 -675 55 060120 KIRKJA DN 6231 -631 55 060130 KLAKSVIK HELIPORT DN 6221 -656 75 060160 HORNS REV A DN 5550 786 21 060170 HORNS REV B DN …

2
Gawk:配列を関数に渡す
GNU awk 3.1.6で立ち往生し、配列のバグを回避したと思いますが、600行のawkプログラムでスコープの問題のように見えます。私のバグを見つけるには、awkの配列スコープの理解を確認する必要があります。 この実例のawkコードを考えると... function foo(ga) { ga[1] = "global result" } garray[1] = "global" foo(garray) print garray[1] 印刷されます... global result 配列は常に参照によって関数に渡されるため、すべての配列は常にグローバルです。ローカル配列を作成する方法はありません。これは正しいです?明示的に言っているドキュメントを見つけることができませんでした。 私がデバッグしているので、3.1.6自体にこの領域の既知のバグがあるため、awkのバグがどこに留まり、自分のバグがどこから始まるのかを特定しようとしています。 補足:ga []が関数内で機能するのはなぜですか? まず、配列を関数に渡すことfoo(ga)は実際には不要です。garray[]関数内からアクセスするだけです。ただし、それを実行しても測定可能なパフォーマンスの低下はなく、デバッグとエラー報告に役立ちます。 を使用する場合foo(ga)、ga[]はグローバル配列の同義語ですgarray[]。のローカルコピーでgarray[]はgarray[]なく、シンボリックリンクがファイルへのポインターであるように、単にへのポインターであり、同じファイル(または配列)に複数の名前でアクセスできます。 補足:グレン・ジャックマンの回答の明確化 関数の外で作成された配列は関数に対してグローバルであり、関数に渡されるか、関数内で参照されるだけですが、関数内で作成された配列は実際には関数に対してローカルのままであり、関数の外からは見えません。ジャックマン氏の例を修正すると、これがわかります... awk ' function bar(x,y) { split("hello world", y) print "x[1] inside: " x[1] print "y[1] inside: " y[1] } BEGIN { …
9 awk  function  array 

1
sedまたはawkの複数の行の置き換え[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前休業。 私はsedまたはawkを使用してsmbファイルの5行を置き換えようとしていますが、改行を処理する方法がわかりません。
9 sed  awk  scripting  perl 

6
ファイルの特定のコンテンツを取得する
だから私はそれらについて聞いたのでこの問題のためのツールが存在することを知っていますが、それらが何であるかはわかりません。 / etc / passwd内のユーザー名以外のすべてのデータを除外するようなことをしたいのですが。 たとえば、次のファイルからuser1、user2、およびuser3を取得したいとします。この場合のロジックは、「ファイルの各行の最初の ':'までテキストを取得する」です。 user1:x:1:4 user2:x:2:5 user3:x:3:6 出力は次のようになります。 user1 user2 user3
9 files  sed  awk  cut 

3
ファイルの最後から最後のカンマ区切りを削除するにはどうすればよいですか?
Linuxでファイルから最後のカンマ区切りを削除するにはどうすればよいですか? ファイルの例: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536", 予期された結果: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536"

2
awkを使用した3つのファイルの処理
以下のファイルを検討してください。 file1: boo,8,1024 foo,7,2048 file2: foo,0,24,154 noo,0,10,561 file3: 24,154,7,1024,0 私が必要なのは、File1に移動して、次のことを確認することです$2==7。trueの場合、取る$1、$2と$3からファイル1。ここで$1、File1とFile2が等しいかどうかを比較する必要$1があります。trueの場合、私が取らなければならない$3と$4のFile2の中に存在していないこれはFile1、その後、私が行かなければならないFILE3とかどうかを確認$1からFILE3することに等しい$3からFile2の、そして$2からFILE3に等しい$4からFile2の。はいの場合$2、File1からかどうかを確認する必要があります等しい$3からFILE3、この条件が真であるならば、私は比較する必要が$3からはFile1と$4からFILE3場合は、$3からファイル1以上である$4から、FILE3。 次のスクリプトを試しました。 cat [file1] [file2] [file3] | awk -F, '{if(NF==3) {if($2==7){a[$1]=$1; b[$1]=$2; c[$1]=$3} }else {if(NF==4){if(a[$1]==$1){d[$3]=$3; e[$4]=$4} }else {if(NF==5){if(d[$1]==$1 && e[$2]==$2){print a[$1], b[$1], c[$1], d[$1]}} } } }' 望ましい出力は次のとおりです。 foo,7,2048,24,154,1024

7
マイナス記号を維持しながら特定の列の数値を削除しますか?
次のデータフレームが水平方向と垂直方向に無期限に続き、奇数列にのみ負の数が表示されます。 -1 2 3 4 -5 9 2 3 -4 5 -6 11 そして、2番目、4番目、6番目の完全な列(またはすべての偶数列)と、1番目、3番目、および5番目(またはすべての奇数列)からのみマイナス記号が必要なので、これを取得します。 - 2 4 - 9 3 - 5 - 11 そして最終的にこれで終わります: -2 4 -9 3 -5 -11 したがって、変更されていない偶数列と奇数列の値が必要です。負の値がある場合は-を保持し、正の値がある場合は破棄します。 これをawk / sedで行う方法はありますか? これは私が得る限り遠いです: awk '{ for (i=2;i<=NF;i+=2) $i="" }1' FILE.txt | sed 's/[0-9,.]*//g'


6
awk-複数の.datファイルの2行目を1つのファイルに出力する
次のような複数のファイルがあります:(実際には80あります) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 2行目がすべて含まれているファイルが必要です。すなわち output.dat 6 9 8 4 これまでのところ、ファイル名をループしますが、その前にファイルを上書きします。たとえば、上記のファイルの出力は次のようになります 8 4 私のシェルスクリプトは次のようになります。 post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

6
サイズで画像を検索:find / file / awk
私は一定の高さ(500px以上)のpng画像ファイルを見つけようとしています。私はそれfileが画像の寸法を返すことを知っています。例: $ file TestImg1a.png TestImg1a.png: PNG image data, 764 x 200, 4-bit colormap, non-interlaced しかし、私はこれを使用して、高さが500pxを超えるディレクトリ内のすべてのファイルを検索する必要があります。高さに関係なくすべてのファイルを印刷する方法を知っています。 find . -name '*.png' | xargs file | awk '{print $7 " " $1}' しかし、どうすれば$ 7を500を超える結果に制限できますか?
9 files  find  awk  xargs  images 

1
awkの2つのフィールド区切り文字(コロンとスペース)
1つがスペースである場合、awkコマンドで2つのフィールド区切り文字をどのように指定できますか?これはawkに埋め込まれたif-else条件を使用することで実行できると思いますが、正確なコマンドについてはわかりません。 サンプルファイルは次のとおりです。 cat test.txt Swapnil Engineer 20000 Avinash:Doctor:30000 Dattu GovntJob 50000 Amol:Master:10000 2列目($ 2)を印刷します。予想される出力は次のとおりです。 Engineer Doctor GovntJob Master スペースとコロンの両方をフィールドセパレーターとして配置しようとすると、構文エラーで失敗しました。 awk -F[ :] '{print $2}' test.txt awk: cmd. line:1: :] awk: cmd. line:1: ^ syntax error 2つのフィールド区切り文字を使用してawk機能を利用するにはどうすればよいですか?
8 awk 

5
行末にある「-」で区切られた1つ以上のフィールドを削除します
データgoogleapis.txtを解析します bucket,abc-def-ghi-45gjd4-wwxis bucket,dde-wwq-ooi-66ciow-po22q instance,jkl-mno-1-zzz-68dkakw-oo9w8 disk,pqr-stu-10-kuy-l2oxapw-rp4lt 以下のような結果を期待しています bucket,abc-def-ghi bucket,dde-wwq-ooi instance,jkl-mno-1-zzz disk,pqr-stu-10-kuy -スペースに変更してからこのコマンドを実行する必要があると思います cat googleapis.txt | awk '{$NF="";sub(/[ \t]+$/,"")}1' | awk '{$NF="";sub(/[ \t]+$/,"")}1' 私はこれからそれを取得しましたhttps://stackoverflow.com/a/27794421/8162936 解析後、スペースをハイペン-バックに変更します。 誰かがそれを解析するためのベストプラクティスまたはワンライナーシェルコマンドを知っていますか?皆さんありがとう

5
すべての列にNAを含む行を削除する
次のようなタブ区切りファイルがあります。 gene v1 v2 v3 v4 g1 NA NA NA NA g2 NA NA 2 3 g3 NA NA NA NA g4 1 2 3 2 各行のフィールド数は固定され、同じです。列2から最後までのすべての行のすべてのフィールドがNAである上記のファイルからそれらの行を削除します。次に、出力は次のようになります。 gene v1 v2 v3 v4 g2 NA NA 2 3 g4 1 2 3 2

3
ファイルのある列の一致するエントリを別のファイルの別の列で置き換える
次のような2つのタブ区切りファイルがあります。 file1: NC_008146.1 WP_011558474.1 1155234 1156286 44173 NC_008146.1 WP_011558475.1 1156298 1156807 12 NC_008146.1 WP_011558476.1 1156804 1157820 -3 NC_008705.1 WP_011558474.1 1159543 1160595 42748 NC_008705.1 WP_011558475.1 1160607 1161116 12 NC_008705.1 WP_011558476.1 1161113 1162129 -3 NC_009077.1 WP_011559727.1 2481079 2481633 8 NC_009077.1 WP_011854835.1 1163068 1164120 42559 NC_009077.1 WP_011854836.1 1164127 1164636 7 file2: NC_008146.1 GCF_000014165.1_ASM1416v1_protein.faa …
8 awk 

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