最新記事

Linuxでは、「/」記号で終わる前に、txt行に「db」という単語を含むtxtファイルから最初の単語を抽出します。
linux
awk
sed
grep

Linuxでは、「/」記号で終わる前に、txt行に「db」という単語を含むtxtファイルから最初の単語を抽出します。

2行を含むabc.txtファイルがあります。db特定の行の単語を含む行の最初の単語を抽出したいと思います。 abc.txt: XYZ/db_abc.sql ijkl/tables/table_name/tl_abc.sql grepを試すと、grep "db" abc.txt「db」を含む行が表示されますが、最初の単語を出力として抽出したいと思いますXYZ。 出力: $ grep "db" abc.txt XYZ/db_abc.sql 予想出力: XYZ 同様に、grepを試すとgrep "tl" abc.txt「tl」を含む行が表示されますが、3番目の単語を出力として抽出したいと思いますtable_name。 出力: $ grep "tl" abc.txt ijkl/tables/table_name/tl_abc.sql 予想出力: table_name

Admin

ubuntu / debianリポジトリにインストールされているすべてのパッケージを一覧表示する
debian
awk
repository

ubuntu / debianリポジトリにインストールされているすべてのパッケージを一覧表示する

すべてのパッケージを一覧表示する方法私はインストールしました外部コマンドを使用せずにUbuntu / Debianの一部のリポジトリで、またはaptitude同じ基本コマンドを使用するapt list --installedここ: 現在のリポジトリをすべて一覧表示します。 apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq そしてここ、 for p in $(dpkg -l | awk '/ii/{ print $2 }'); do for i in $(apt-cache policy "$p" | awk '/Installed/{ print $2}'); do apt-cache policy "$p" | grep -A1 '\*\*\*\ '$i'' | if grep -q jessie; then echo $p; fi; done; done 後者は解決策ではありません。なぜなら著者でもそれがそうだと認めるからだ。「とても醜い」しかし、基本的なツールのみを使用するアプローチは良いです。 それとも最善の方法は、いくつかのインストールログをawk解析するスクリプトを書くことですか?apt しかし、なぜ疑問に思うのですか?現在、私のリポジトリはすべて次のとおりです。 LP-PPA-myid,a=focal cloudsmith/myid/repo,a=bullseye Docker,a=bullseye Google LLC,a=stable Debian,a=oldstable Debian,a=testing Debian Backports,a=bullseye-backports Debian,a=stable-security Debian,a=stable しかし、なぜNodejsリポジトリがリストにないのかわかりません。 $ apt-cache policy nodejs nodejs: Installed: 16.18.1-deb-1nodesource1 Candidate: 16.19.0-deb-1nodesource1 Version table: 16.19.0-deb-1nodesource1 500 500 https://deb.nodesource.com/node_16.x bullseye/main amd64 Packages *** 16.18.1-deb-1nodesource1 100 100 /var/lib/dpkg/status 12.22.12~dfsg-1~deb11u1 500 500 http://security.debian.org/debian-security bullseye-security/main amd64 Packages 12.22.5~dfsg-2~11u1 500 500 http://deb.debian.org/debian bullseye/main amd64 Packages

Admin

サポート/広告リンクモードのethtool出力の比較
linux
awk

サポート/広告リンクモードのethtool出力の比較

私のカードのサポートレベルが高いことを確認するために、ethtoolの「サポートされているリンクモード:」と「広告されたリンクモード:」の出力をキャプチャしようとしていますが、スイッチ側ではサポートされていません。そのため、awkまたはsedを使用してパターンリストの出力をキャプチャしようとしていますが、比較できるようにその部分をキャプチャする方法はありません。どんなアイデアがありますか? ethtool em1 Settings for em1: Supported ports: [ FIBRE ] Supported link modes: 1000baseKX/Full 10000baseKR/Full 25000baseCR/Full 25000baseKR/Full 25000baseSR/Full Supported pause frame use: Symmetric Supports auto-negotiation: Yes Supported FEC modes: None BaseR Advertised link modes: 1000baseKX/Full 10000baseKR/Full 25000baseCR/Full 25000baseKR/Full 25000baseSR/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Advertised FEC modes: None Speed: 10000Mb/s Duplex: Full Port: FIBRE PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: g Wake-on: d Current message level: 0x00000004 (4) link Link detected: yes 予想される結果は次のとおりです。 Supported link modes: 1000baseKX/Full 10000baseKR/Full 25000baseCR/Full 25000baseKR/Full 25000baseSR/Full Advertised link modes: 1000baseKX/Full 10000baseKR/Full 25000baseCR/Full 25000baseKR/Full 25000baseSR/Full この出力で行う計画は、サポートされているリンクよりも広告リンクが少ない場合、広告リンクをサポートされているリンクと比較することです。 これが私が思いついた解決策です。私はこれが改善できると確信しています: #!/bin/bash # Get the interface name iface=$1 # Get the supported link modes supported=$(ethtool $iface | awk '/Supported link modes:/{mode=$NF; getline; while(/[[:space:]]+[0-9]+/){mode=mode" "$NF;getline}} END{print mode}') # Get the advertised link modes advertised=$(ethtool $iface | awk '/Advertised link modes:/{mode=$NF; getline; while(/[[:space:]]+[0-9]+/){mode=mode" "$NF;getline}} END{print mode}') # Compare the supported and advertised link modes if [ "$supported" == "$advertised" ]; then echo "The supported and advertised link modes match." else echo "The supported and advertised link modes do not match." fi

Admin

2つのcsvファイルの複数の列を比較し、1つを別のファイルの列に置き換えます。
linux
awk
csv

2つのcsvファイルの複数の列を比較し、1つを別のファイルの列に置き換えます。

2つのファイルを比較しfile aてfile b同じ列を使用する必要がありますが、列の値の比較など、2つのファイルにランダムに配置する必要がありますaccount。一致するレコードは次のとおりです。codedatetypepcvolbsaccountfile aaccount1file bfile afile c 私はLinuxの背景知識がなく、オンラインフォーラムを検索した後、AWKでこれを行うことができることを少し知っていますが、awkには慣れていません。助けてください。 Linux環境では比較が必要です。 ランダムに配置された列は、コマンドがファイルaとファイルbを一致させるために使用できる列を提供できることを意味します(列の順序は両方のファイルで同じではありません)。どちらのファイルでも、一致する列は8、10、15のいずれかになります。 アカウントと同様に、account1は最初と最後の列ではなく、コマンドは更新する列を選択する必要があります。 繰り返し処理 -->ファイルbにファイルaの1つのレコードが重複している場合は、ファイルbの最初の一致レコードを更新して、一致で再利用できないようにする必要があります。 -->ファイルaに重複が多い場合、ファイルbに一致するレコードが1つしかない場合、最終ファイルcはファイルaの一致する値レコードをすべて更新するのではなく、アカウント値を1つだけ更新する必要があります。 file a account,temp1,code,type,date,subtask,pc,toy,vol,bs,sub 6576,WEQR,TYRE,BS,54122022,OBCD,K,BAT,5000,F,SCSC 1234,GFHD,ASDF,BS,21122022,STOP,C,CAT,1000,S,MATH 7654,GHAD,LOPI,CV,9089022,KGAD,G,BSEE,5908,J,IOYU file b account,code,date,type,inst,insttype,pc,str,vol,bs,name,xdate,account1 1234,ASDF,21122022,BS,GOLDY,RUB,C,123.1,1000,S,RON,90891234,CCCCC 2761,LOPCS,10122022,BSFD,SLV,STR,C,123.9,1001,B,RON,99999988,DDDDD 0980,RTDF,28822025,JUFG,BRNZ,HIY,C,123.8,2000,S,RON,88881234,EEEEE file c account,temp1,code,type,date,subtask,pc,toy,vol,bs,sub 6576,WEQR,TYRE,BS,54122022,OBCD,K,BAT,5000,F,SCSC CCCCC,GFHD,ASDF,BS,21122022,STOP,C,CAT,1000,S,MATH 7654,GHAD,LOPI,CV,9089022,KGAD,G,BSEE,5908,J,IOYU

Admin

拡張子が異なるマルチ入力およびマルチ出力コマンド
awk
sed
grep

拡張子が異なるマルチ入力およびマルチ出力コマンド

私はLinuxシステムでいくつかのタスクを実行するためにgrep、sed、およびcutコマンドを使用しています。 zgrep -A1 "^module" *.v.gz | sed -n -e 's/^\(module \)*\(.*(.*)\).*$/\2/p' | cut -f1 -d"(" これは.v.gzファイル拡張子を持つファイルで実行され、出力ファイルの拡張子が.txtであることを望みます。 たとえば、次のファイル名を入力します。 abcd.v.gz efgh.v.gz ijkl.v.gz mnop.v.gz 出力ファイル名 abcd.txt efgh.txt ijkl.txt mnop.txt だから、同じファイル名の接頭辞を保持し、拡張子を変更したいと思います。ファイルの数に関係なく、どうすればこれを行うことができますか? 私はシェルプリミティブを探していません

Admin

AWKスクリプトのパターンに基づいてテキストの特定の部分を処理します。
shell-script
awk
scripting

AWKスクリプトのパターンに基づいてテキストの特定の部分を処理します。

私の好みに応じてtex文書をhtmlに変換するためにawkでスクリプトを開発しています。 #!/bin/awk -f BEGIN { FS="\n"; print "" } # Function to print a row with one argument to handle either a 'th' tag or 'td' tag function printRow(tag) { for(i=1; i<=NF; i++) print "<"tag">"$i""; } NR>1 { [conditions] printRow("p") } END { print "" } ご覧のとおり、それは非常に若い開発段階にあります。 \documentclass[a4paper, 11pt, titlepage]{article} \usepackage{fancyhdr} \usepackage{graphicx} \usepackage{imakeidx} [...] \begin{document} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla placerat lectus sit amet augue facilisis, eget viverra sem pellentesque. Nulla vehicula metus risus, vel condimentum nunc dignissim eget. Vivamus quis sagittis tellus, eget ullamcorper libero. Nulla vitae fringilla nunc. Vivamus id suscipit mi. Phasellus porta lacinia dolor, at congue eros rhoncus vitae. Donec vel condimentum sapien. Curabitur est massa, finibus vel iaculis id, dignissim nec nisl. Sed non justo orci. Morbi quis orci efficitur sem porttitor pulvinar. Duis consectetur rhoncus posuere. Duis cursus neque semper lectus fermentum rhoncus. \end{document} 私が望むのは、スクリプトがライブラリ、変数などをインポートする前とその間の行だけを\begin{document}解釈することです\end{document}。今はそれに興味がありません。 そのパターン内のテキストのみを処理するにはどうすればよいですか?

Admin

文字列の最初の文字を Grep します。
linux
shell-script
awk
grep

文字列の最初の文字を Grep します。

10:30:01 10:35:01 形式で一度grepをしたかった。 ケース1:10のうち1つ Case2:30から3が出力されます。 1 3 0 22年10月17日日付形式は私がgrepをしたい形式です。10、番号17、22、それぞれ。 出力は次のとおりです 10 17 22 grepまたはawkを使用できますか?

Admin

印刷物から色を削除して配管に適したものにする方法
bash
awk
find
colors

印刷物から色を削除して配管に適したものにする方法

私はいくつかのUnixコマンドを送信するために私のスクリプトを使用しています。問題は、私のスクリプトで色を使用していることです。たとえば、 yellow=`tput setaf 3` reset=`tput sgr0` function Warning() { echo "${yellow}$*${reset}" } 使用できるコマンドがありますWarning "Compress $directory"。 これをfindコマンドに入力したいと思います。 私は以下を使用しています: ./compress.sh | grep Push | awk '{print $2}' | while read directory; do find $directory | wc -l; done; ただし、次のエラーが発生します。 find: '/some_directory\033(B\033[m']: そのファイルまたはディレクトリがありません 0 awk印刷の終わりに見えない文字が追加されたか、色がパイピングと混同されているようです。 このエラーが発生するのはなぜですか?どうすればいいですか?

Admin

POSIX shのソリューション
awk
posix

POSIX shのソリューション

POSIX awkウィザード、あなたの助けが必要です!一見すると、この質問は些細なように思えるかもしれませんが、私の意図をもう少し詳しく説明します。 私はスタンドアロンPOSIX awkプログラムを開発しており、95%完了しましたが、正しい方法が見つかりませんでした。これについては後でお見せします。 POSIX shのソリューション まず、実装したいPOSIX shソリューションは次のとおりです。 #!/bin/sh key=$(date +%Y-%m-%d) # results in 2022-08-04 while read -r line; do awk -v key=$key '$0 ~ key { for (i = 0; i < 10; i++) getline current print current }' "$line" done < /tmp/awk.data 上記のコードスニペットからわかるように、 awk.dataファイルから一度に1行ずつ読み込み、繰り返すたびにawkを呼び出し、パターンに一致する行を検索し、key一致するとループを実行しfor、9行をスキップし、印刷します。最終結果 1. ファイルの内容は次のとおりですawk.data。 $ cat /tmp/awk.data /tmp/sample-001.html /tmp/sample-002.html /tmp/sample-003.html # <...> /var/log/sample-787.html /var/log/sample-788.html POSIX awkの問題を解決しようとしています。 これはPOSIX awkプログラムで実装したいもののほんの一部であり、これまでに試したことは次のとおりです。しかし、成功しませんでした。 #!/usr/bin/awk -f BEGIN { date = getdate() data = "/tmp/awk.data" # <...> read(data) } function getdate() { cmd = "date +%Y-%m-%d" cmd | getline date close(cmd) return date } function read(data) { cmd = "cat" " " data while (cmd | getline line) parse(line) close(cmd) } function parse(file) { cmd = "cat" " " file while (cmd | getline line) { if (line ~ date) { for (i = 0; i < 10; i++) getline current print current } } close(cmd) } このread関数は、出力の各行cat(たとえば、 /tmp/sample-001.html等)を読み取り、それを各ファイルを解析し、目的の出力を生成する他の関数/tmp/sample-002.htmlに渡します。parse whileこれは、処理された各行にループを使用し、現在の行が変数で定義されたパターンと一致することを確認する最初の試みですdate。その場合はfor、ループを開始して9行をスキップして最後の行を印刷します。それは非常に可能です非常に 非効率的ですが、プログラムは実行されますが、永久に繰り返され、何も印刷されません。完全に閉じ込められました! つまり、私のawkプログラムはどのパラメータも受け入れません。したがって、この場合、awkの内部から外部ファイルを読み取ることが重要です。 事前に助けてくれてありがとう!

Admin

AWKまたはsedを使用して.csvファイルを一括上書きする
awk
sed
csv

AWKまたはsedを使用して.csvファイルを一括上書きする

.csvファイル(他の拡張子のないファイル)で埋められた多くのサブディレクトリを持つディレクトリがあります。 .csvsed / AWKコマンドを使用してすべてのファイルを一度に上書きしたいと思います。ディレクトリ構造が変わらない場合は、すべてを別の方向に移動することをお勧めします。 私が使用するコマンドは次のとおりです。 $ awk 'BEGIN{FS=OFS=","} {sub("^([^/:]+://)?(www[.])?","",$1); sub("/.*","",$1)} 1' input_file $ sed -E 's~(^[^/]*//)?(w+\.)?([^/]*)[^,]*~\3~' input_file $ sed -E 's#^(.*://)?(www\.)?##; s#^([^,/]+)[^,]*#\1#' input_file ファイルごとに編集するのではなく、すべてのファイルを一度に編集する方法

Admin

タブ区切りファイルの最初と5番目の列を検索して、5番目の列のスペースをタブに変換します。
text-processing
awk
cut
bioinformatics

タブ区切りファイルの最初と5番目の列を検索して、5番目の列のスペースをタブに変換します。

タブで区切られた列を含むファイルがありますtsv。スペースで区切られた値を持つ5番目の列を取得したいと思います。区切りスペースをタブ区切りに変換し、新しいファイルとして保存します。 試み: cut -d"\t" -f"4" input.tsv awk -v OFS="\t" '$1=$1' input.tsv > output.tsv 入力する: Composite_Element_REF Gene_Symbol Chromosome Genomic_Coordinate TCGA-KL-8323-01A-21D-2312-05 TCGA-KL-8324-01A-11D-2312-05 TCGA-KL-8325-01A-11D-2312-05 cg00000027 RBL0 14 53468110 0.0545368833399913 0.635089208882213 0.0581022991274144 cg00000028 RBL1 15 53468111 0.0545366588241415 0.635089205024173 0.0581085373336217 cg00000029 RBL2 16 53468112 0.0545366588040571 0.635089205078394 0.0581085373332275 予想出力: Composite_Element_REF TCGA-KL-8323-01A-21D-2312-05 TCGA-KL-8324-01A-11D-2312-05 TCGA-KL-8325-01A-11D-2312-05 cg00000027 0.0545368833399913 0.635089208882213 0.0581022991274144 cg00000028 0.0545366588241415 0.635089205024173 0.0581085373336217 cg00000029 0.0545366588040571 0.635089205078394 0.0581085373332275

Admin