8 文字列内の1文字のみを小文字/大文字にawkまたはsedしますか? いくつかの文字列で1文字のみを大文字/小文字にする方法はありますか? 入力例: syslog_apr_24_30 syslog_mar_01_17 望ましい出力: syslog_Apr_24_30 syslog_Mar_01_17 月の大文字で始まることに注意してください。 私は試しましたawkが、それを機能させるのに十分ではありません。 13 bash sed awk
3 特定の文字列を含む行のみをsedする方法は? 入力: Select ASDF 325 sdfg sdflk lk Select TRG 46sdg rasdftz fsgs 45 Select ASDF 6ffg sdfg 4456 sdrg 出力: Select ASDF 325 XXXX sdflk lk Select TRG 46sdg rasdftz fsgs 45 Select ASDF 6ffg XXXX 4456 sdrg 要するに、「sed」「sdfg」を「XXXX」にする必要があります。 ただし、「Select ASDF」文字列を含む行のみ。これを行うにはどうすればよいですか?(sed、awkなど:\) 13 sed awk
4 awkコマンドを使用したBEGINおよびEND awkのマニュアルによると、BEGINとENDは入力の照合には使用されず、起動とクリーンアップの情報をawkスクリプトに提供するために使用されます。以下に例を示します。 ls -l | \ awk 'BEGIN { print "Files found:\n" } /\<[a|x].*\.conf$/ { print $9 }' Files found: amd.conf antivir.conf xcdroast.conf xinetd.conf まず、出力する文字列を出力します。次に、入力のパターンマッチをチェックします。入力はaまたはxで始まり、その後に任意の文字が1回以上続き、その後に.confが続きます。一致した場合、9列目が出力されます。 ここでbeginを使用せざるを得ないという事実は、それはawkがBEGINまたはENDを含む最大1つの印刷関数しか使用できないことを意味しますか?そうでない場合、キーワードBEGINなしで最初にprint関数を使用できないのはなぜですか?BEGINは不要なようです。 13 awk
2 欠損値の空白スペースをゼロに置き換える 約30K行のinput.txtタブ区切りテキストファイルがあります。各行(s1..s30K行)で欠損値(つまり、空白)をチェックし、欠損値にゼロ値を入力します。out.txtを参照してください。 input.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 4 4 s3 4 8 0 out.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 0 4 4 0 s3 4 0 8 0 13 text-processing sed awk perl
3 awk-特定の列の1文字だけを置き換える 次のようなファイルがあります。 2018.01.02;1.5;comment 1 2018.01.04;2.75;comment 2 2018.01.07;5.25;comment 4 2018.01.09;1.25;comment 7 .2番目の列のすべてのドットをコンマで置き換えたいのです,が、これをsed 's/\./\,/g' fileどのように使用できるsedか、できれawkば2番目の列にのみ適用するので、出力は次のようになります。 2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7 13 text-processing awk sed
3 100Gを超えるディスクサイズを検出するこのフィルターを短縮できますか? 私の目標は、lsblkから100Gを超えるディスクを取得することです。 私はそれを動作させていますが、それは厄介です。短縮できると確信しています。lsblkとはまったく異なるものを使用するか、awkを使用して人間が読み取れる数値を直接フィルター処理することができます。 ここに私がまとめたものがあります: lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}' 100Gより大きいディスクのsdxおよびnvmexxx部分のみを出力します。まさに私が必要なもの。 私はそれで満足していますが、あなたからもっと学びたいと思っています。 12 awk grep disk lsblk
6 各行にランダムな文字列を追加するにはどうすればよいですか? 実行中に各行にランダムな文字列を追加しようとしています: awk '{print "name" "'$ran'" "-"$0}' 'myfile' その前に、ランダムな文字列が生成されます: ran="$(tr -dc '[:alnum:]' </dev/urandom | head -c 6)" 問題は、各行に同じランダム文字列を出力することです: nameGQz3Ek- nameGQz3Ek- nameGQz3Ek- 行ごとに異なるランダム文字列を取得するにはどうすればよいですか? 12 awk
9 2進数に従って単語のリストを作成する 私は次のようなマトリックスを持っています: 入力: A B C D E F G H I 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 … 12 text-processing awk
8 最初の行に基づいて列を並べ替える方法は? 非常に大きなデータセット(1000行と700000列)の列を並べ替える必要があります。例として、私の列はcol1 col4 col3 col2のようにランダムに配置され、ソートする必要があります。 私はいくつかのコマンドを試しましたが、成功しませんでした。 例: ID M2 M5 M8 M1 M3 M9 .....M7000000 Animal1 1 0 2 1 0 2 .....1 Animal2 0 1 2 0 1 1 .....0 Animal3 2 1 0 1 2 1 .....0 . . . . Animaln この例では、ドットは、列と行がたくさんあることを意味します。繰り返しますが、列を次のようにソートする必要があります。 ID M1 M2 M3 M4 M5 … 12 text-processing awk
10 テキスト内の文字間の余分なスペースを削除するスクリプト 私はすべての文字の後に追加のスペースが追加されたテキストの負荷があるテキスト文書を持っています! 例: T h e b o o k a l s o h a s a n a n a l y t i c a l p u r p o s e w h i c h i s m o r e i m p o … 12 text-processing sed awk scripting
3 2つのファイルを一度に1列ずつマージする 次の形式の2つの大きなファイル(3000列、15000行)があります file1(タブ区切り): 1/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 file2(タブ区切り): 3 5 2 1 7 10 3 4 3 各ファイルの最初の列の値を「:」区切り文字で組み合わせてから、2番目、3番目などの列に移動します。必要な出力(タブ区切り): 1/0:3 0/0:5 0/0:2 0/0:1 1/1:7 0/0:10 1/1:3 0/1:4 0/0:3 効率は重要ではないため、どの言語でも問題ありません。これが以前に尋ねられた場合、私は謝罪します。 12 text-processing awk sed merge data
6 awkを使用して列を並べ替える 私はcsvファイルの7列目を最後に移動しようとしています awk -F '{print $1,$2,$3,$4,$5,$6,$8,$9,$10,$11,$7}',OFS= "$file" $ fileはディレクトリ内の.csvファイルです。ただし、出力は awk: ^ syntax error 誰でもこのエラーを修正する方法を知っていますか? 12 text-processing awk
3 sedまたはawkを再度呼び出さずに、文字列からドット文字を削除するにはどうすればよいですか? 次のhostlist.txtようなテキストを含むというファイルがあります。 host1.mydomain.com host2.mydomain.com anotherhost www.mydomain.com login.mydomain.com somehost host3.mydomain.com 次の小さなスクリプトがあります。 #!/usr/local/bin/bash while read host; do dig +search @ns1.mydomain.com $host ALL \ | sed -n '/;; ANSWER SECTION:/{n;p;}'; done <hostlist.txt \ | gawk '{print $1","$NF}' >fqdn-ip.csv 出力先fqdn-ip.csv: host1.mydomain.com.,10.0.0.1 host2.mydomain.com.,10.0.0.2 anotherhost.internal.mydomain.com.,10.0.0.11 www.mydomain.com.,10.0.0.10 login.mydomain.com.,10.0.0.12 somehost.internal.mydomain.com.,10.0.0.13 host3.mydomain.com.,10.0.0.3 私の質問は.、コンマの直前を削除せずにsed、gawk再度呼び出すことはできませんか?ドットを取り除く既存の呼び出しsedまたはgawk呼び出しで実行できるステップはありますか? hostlist.txt 数千のホストが含まれるので、スクリプトを高速かつ効率的にしたいです。 12 shell-script awk sed regular-expression string
4 grepを使用して()の前の文字を抽出します 文字 '('の前の文字を抽出する必要があります。ファイル構造は次のとおりです。 バラ(いい) デイジー() リリー(悪い)罰金 ひまわり() 次の形式の出力ファイルが必要です。 rose daisy lilly sunflower 誰でもこのコマンドを伝えることができます..... awk、grep、またはsedが望ましい... 12 sed awk grep