最新記事

別の列の最も早い日付に基づいて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

nmapスキャン出力ファイルからポートのみをgrepする方法は?
shell-script
text-processing
nmap

nmapスキャン出力ファイルからポートのみをgrepする方法は?

➜ cat nmap/ports.nmap Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-21 11:30 IST Warning: 10.10.10.100 giving up on port because retransmission cap hit (10). Nmap scan report for 10.10.10.100 Host is up (0.26s latency). Not shown: 65410 closed tcp ports (reset), 111 filtered tcp ports (no-response) PORT STATE SERVICE 88/tcp open kerberos-sec 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open http-rpc-epmap 636/tcp open ldapssl 49152/tcp open unknown 49153/tcp open unknown 49154/tcp open unknown 49155/tcp open unknown 49157/tcp open unknown 49158/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 17.57 seconds 検索後にこのコマンドを使用します。 cat nmap/ports.nmap | grep 'open' | awk '{ print $1 }' | awk '{print ($0+0)}' | sed -z 's/\n/,/g;s/,$/\n/' 出力: 88,135,139,389,445,464,593,636,49152,49153,49154,49155,49157,49158 これより簡単なコマンドはありますか?誰でも私を助けることができますか?

Admin

Linuxでは、ファイル1の2番目の列とファイル2の2番目の列を比較します。
text-processing
bioinformatics

Linuxでは、ファイル1の2番目の列とファイル2の2番目の列を比較します。

file1とfile2という2つのファイルがあります。染色体番号が同じ場合、ファイル1の2番目の列がファイル2の(2番目の列 - 1,000)より大きく、ファイル2の(2番目の列+ 1,000)より小さい場合は、4番目の列を出力すると仮定します。列とファイル 1 の 3 番目の列です。 ファイル1(3列): chr1 12000 1 chr2 12700 2 chr2 13000 0.5 ファイル2(4列): chr1 11869 14409 gene_id=ENSG00000223972 chr1 11869 14409 gene_id=ENSG00000224000 chr2 11869 12227 gene_id=ENSG00000300000 chr2 12613 12721 gene_id=ENSG00000270000 chr2 13221 14409 gene_id=ENSG00000400000 出力(2列): gene_id=ENSG00000223972 1 gene_id=ENSG00000270000 2 gene_id=ENSG00000400000 0.5 私は試した: awk 'NR==FNR{a[$1]=$1;next}{if ((a[$2]>$2-1000) && (a[$2]<$2+1000)){print $4, a[$3]}}' file1 file2 しかし、私は何も得られませんでした。 Linuxで目的の出力をすばやく取得するには?

Admin

一意の名前の頻度を見つける
bash
shell-script
text-processing
awk
sed

一意の名前の頻度を見つける

ユーザー名を含む圧縮CSVファイル(.csv.gz)のサブフォルダがあり、ユーザー名の頻度を見つけようとします。 次のbashパイプラインは親ユーザーを提供します。 for subfolder in folder; do gunzip -rc $subfolder | cut -d, -f1 | sort | uniq -c | sort -nr | head; done しかし、サブフォルダに大容量のファイルが多いと、非常に遅くなります。この目的でより効率的なbashスクリプトがありますか?

Admin

最後のフィールドに基づいて Uniq、最後の行を保持、重複するアイテム数を追加
bash
text-processing
awk
columns

最後のフィールドに基づいて Uniq、最後の行を保持、重複するアイテム数を追加

次のロジックを実装するには、bashスクリプトでawkコマンドを実装するのに役立ちます。ソート/ユニークな組み合わせを試しましたが、成功しませんでした。 以下に示すように、タイムスタンプといくつかの数字を含む長いリストがあります。 [2020-09-15 09:03:21.835335] 1021 [2020-09-15 09:03:21.935335] 1021 [2020-09-15 09:03:22.835335] 1022 [2020-09-15 09:03:25.835335] 1022 [2020-09-15 09:04:21.835335] 1023 [2020-09-15 09:05:21.835335] 1023 [2020-09-15 09:04:22.835335] 1023 [2020-09-15 09:05:23.835335] 1023 最終結果では、上の2列にあるリストを数値的に処理したいと思います。最終処理されたデータから2列の固有番号(一度だけ発生しても)を計算し、その番号の前の新しい列に追加したいと思います。実際に必要なのは、数値列で重複/固有項目が最後に発生したタイムスタンプです。 [2020-09-15 09:03:21.935335] 1021 2 [2020-09-15 09:03:25.835335] 1022 2 [2020-09-15 09:05:23.835335] 1023 4 どんな助けでも大変感謝します! ありがとうございます!

Admin

テキストファイル内のコンマ間の値を印刷します。
text-processing
awk

テキストファイル内のコンマ間の値を印刷します。

テキストファイルでコンマ間の特定の値を印刷するには?ファイルにはこの種の行が複数あります。 0.9999899864,0.6666600108,0.00,0.00,0.00,36988,140920,1,150.00,1500.00,1400.00,1300.00,1,0.50,2.00,0.10,1.00,-0.10,1,123.40,1,0.0,8, 私は7番目の値を印刷したいと思います。140920

Admin

テキストをawkに置き換える
text-processing
awk

テキストをawkに置き換える

2つの列を持つテキストファイルがあります。最初の項目には、コードのリスト(GRT986Eなど)が含まれているか、他の場合は低ダッシュ(TRY546_TRE578など)で区切られた2つの部分からなるオブジェクトがあります。オブジェクト間に 1 つ以上の空行がある場合もあります。 2番目の列の一部のオブジェクトには関連変数があります。ファイルは次のようになります。 QR846OI bbbbbbbbb PO3R56 ddddddd UJ6Y68 eeeeeee YU654R PL92WS GH654Y _ HUY765R tttttt 2番目の列を取得し、テキストを「is」にのみ置き換えたいのですが、最初の列と2番目の列を「、」で区切りたいと思います。出力.txtは次のようになります。 QR846OI,yes PO3R56,yes UJ6Y68,yes YU654R PL92WS GH654Y _ HUY765R,yes 私は次のコマンドラインを使います。 awk -F , '{ if ($2 != " ") $2="yes";}1' OFS=, good_interactors.txt > output.txt しかし、効果はあまり良くありません。

Admin

次より大きい重複行の削除
text-processing
awk

次より大きい重複行の削除

したがって、次の形式の入力ファイルがあります。 Hello\tWorld それから私は利用可能です awk -F"\t" '!seen[tolower($1)]++' 最初の列に基づいて重複行を削除します。しかし、そのステートメントで条件をどのように設定しますか?つまり、文字列が5回以上使用されている場合は、重複した行のみを削除しますか、それともすべての行を削除しますか? 入力例: Hello World Hello World Hello World Hello World Hello World New Example Hello World したがって、上記の例では、column1は5回以上存在するため、予想される出力は次のようになります。 Hello World New Example または、特定の行を完全に削除するには New Example

Admin

一致する行と連続した行を削除する(forループ)
text-processing

一致する行と連続した行を削除する(forループ)

このトピックについて同様の質問と解決策を見つけましたが、問題を解決できませんでした。forループ以前に提案されたソリューションを使用してください。 ファイルB: 88569.abcrat 44689.defhom 3702.ghigop 234というファイルのテキストの例: 9606.jklpan how is the weather 88569.abcrat today is a sunny day 44689.defhom tomorrow will be a rainy day 3702.ghigop yesterday was a cloudy day 10116.zyxtak i am happy to see rainbow 234というファイルの目的の出力: 9606.jklpan how is the weather 10116.zyxtak i am happy to see rainbow その後、fileAにリストされている他のファイルに対して検索、一致、および削除プロセスを繰り返す必要があります。 ファイルA: 234 123 456 私は努力しています: for i in $(cat fileA); do for j in $(cat fileB); do awk "/$j/ {while (/$j/ && getline>0) ; next} 1" $i; done; done for i in $(cat fileA); do for j in $(cat fileB); do sed -e "/**$i/$j**/ { N; d; }" $i; done; done しかし、これまでのところ、それらのどれも動作しません。何か問題があるようです。ここで助けを願っています。可能であれば、より良いコマンド提案があるかもしれません。 そして、2番目のスクリプトで太字の部分を正しく書いたかどうかを知りたいです。 PS:私はスクリプト初心者です。提供された助けに感謝します。ありがとうございます!

Admin

特定の行の一部を印刷する
text-processing

特定の行の一部を印刷する

ファイルを読み、次を含むすべての行を印刷したいと思います。 ## DF それとも次に終わりますか? # DF DF次に、次から印刷を開始します。 ここにいくつかの例があります。 local lbpos=21 # DF [LBPOS] Label Position local ktg="PILE" # DF [KTG] Category ## DF [KARG] Control Argument Some text printf '%s\n' "$@" \ | while IFS="" read -r lnp; do # DF [LNP] Line Input More text 結果 DF [LBPOS] Label Position DF [KTG] Category DF [KARG] Control Argument DF [LNP] Line Input

Admin