タグ付けされた質問 「text-processing」

プログラム、スクリプトなどによるテキストの操作または検査

8
ファイルシステム全体でのsedインプレース行削除?
まだ診断されていないアプリケーションのバグが原因で、ディスクがいっぱいのサーバーが数百台あります。重複する行で満たされたファイルが1つあります。ログファイルではなく、変数定義を含むユーザー環境ファイルです(そのため、ファイルを削除することはできません)。 sed誤って追加された行をチェックして削除する簡単なコマンドを書き、ファイルのローカルコピーでテストしました。意図したとおりに機能しました。 ただし、ディスク全体を使用してサーバーで試したところ、およそ次のエラーが発生しました(コピーと貼り付けではなく、メモリからのものです)。 sed: couldn't flush /path/to/file/sed8923ABC: No space left on deviceServerHostname もちろん、私が知っている、左にスペースはありません。だから私はものを削除しようとしています!(sed私が使用しているコマンドは、4000行以上のファイルを約90行に減らします。) 私のsed命令はただsed -i '/myregex/d' /path/to/file/filename ディスクがいっぱいでもこのコマンドを適用する方法はありますか? (クイックフィックスとして数百のサーバーに適用する必要があるため、自動化する必要があります。) (明らかにアプリケーションのバグを診断する必要がありますが、その間サーバーは正しく動作していません...) 更新:私が直面した状況は、自分が削除できることがわかった他のものを削除することで解決しましたが、この質問への回答は今後も他の人にも役立つと思います。 /tmp立ち入り禁止です。同じファイルシステム上にあります。 ディスク領域を解放する前にvi、ファイルを開いて実行することで行を削除できることをテストして確認し:g/myregex/d、変更をで正常に保存しました:wq。一時ファイルを保持するために別のファイルシステムに頼ることなく、これを自動化することは可能であると思われます...(?)

5
最初の行が特定のパターンに一致する場合にのみファイルの内容を印刷する方法は?
スクリプトを作成しています。ファイルの最初の行が特定のパターンに一致するかどうかを確認し、一致する場合はファイルを出力します。どうすればこれを達成できますか? パターンを確認するにはどうすればよいですか?パターンをチェックし、出力に基づいて何かを行う方法はありますか? 編集:この質問を見てください:https : //stackoverflow.com/questions/5536018/how-to-get-match-regex-pattern-using-awk-from-file このようなものが欲しいのですが、どれもうまくいきませんでした。基本的に、最初の行が正規表現パターンと一致するかどうかを確認し、それに基づいてファイルの行を出力します。

6
別のファイルで見つかった行に応じてファイルから行を削除する
ファイルfile1.txtには、次のような行が含まれています。 /api/purchase/<hash>/index.html 例えば: /api/purchase/12ab09f46/index.html ファイルfile2.csvには、次のような行が含まれています。 <hash>,timestamp,ip_address 例えば: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 file2.csvをフィルタリングして、file1.txtにもハッシュの値が存在するすべての行を削除します。それは言うことです: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv またはこのようなもの。 簡単なはずですが、うまく動かないようです。 誰もがこのタスクのための作業パイプラインを提供できますか?

4
固定幅でマニュアルページを印刷する
コマンド例では man apropos > outputfile のフォーマットされたmanページを含むテキストファイルが生成されます(太字など、画面aproposにman apropos直接印刷する場合との違いが少しあります)。 しかし、すべての段落がその幅に揃えられるように、生成された出力ファイルの最大行幅を手動で設定したいと思います。 manページは次の方法で作成されますgroff。たとえば、.ll 50元の.gz manソーステキストファイルの段落の前に配置しようとしましたが、複数のmanページで作業する必要がある場合は簡単です。さらに、すべての文字が認識されるわけではありません。 apropos.1:45: warning: can't find character with input code 195 apropos.1:45: warning: can't find character with input code 168 apropos.1:47: warning: can't find character with input code 178 apropos.1:131: warning: can't find character with input code 169 なので、もっと簡単な方法はあるのかな。の作成中に最大線幅を変更するにはどうすればよいoutputfileですか?特定のコマンドはありますか? 編集: (以下のすべての考慮事項はUbuntu …

3
2つの列の値を組み合わせるにはどうすればよいですか?
次の形式のファイルがあります。 $ cat /tmp/raw 2015-01 5000 1000 2015-02 6000 2000 2015-03 7000 3000 次に、各行の列2と3から結合された値を取得して、結果が次のようになるようにします。 2015-01 6000 2015-02 8000 2015-03 9000 私はこれを試しましたが、2015-03の値のようなファイルの最後の値しか表示されません。

4
一致するフィールドに基づいて列のペアを合計する
次の形式の大きなファイルがあります。 2 1019 0 12 2 1019 3 0 2 1021 0 2 2 1021 2 0 2 1022 4 5 2 1030 0 1 2 1030 5 0 2 1031 4 4 列2の値が一致する場合、両方の行の列3と4の値を合計します。それ以外の場合は、一意の行の値の合計のみです。 したがって、私が期待している出力は次のようになります。 2 1019 15 2 1021 4 2 1022 9 2 1030 6 2 1031 8 …

9
文字列で最も長い数値を出力するにはどうすればよいですか?
文字列で最も長い数値を出力する方法を探しています。 例:文字列がある場合 212334123434test233 どうやって印刷できますか 212334123434 ? 注:数値的に大きな値ではなく、最も長い連続した数列を探しています。 編集:皆さん、答えてくれてありがとう。この質問への回答は非常に圧倒されています。@HaukeLagingの投稿は、私の特定のケースに非常に適しているため、承認済みの回答としてマークしましたが、すべての回答が等しく有効であることを指摘しておきます。問題を解決するためのいくつかの異なるオプションがあることは常に素晴らしいことです。

6
選択したエントリをbibtexファイルから抽出するスクリプト
各エントリが一般的な構造を持つ多くのエントリを持つ大きなbibtexファイルがあります @ARTICLE{AuthorYear, item = {...}, item = {...}, item = {...}, etc } (ARTICLE例によっては別の単語になる場合がありますBOOK) 私がやりたいのは、与えられたAuthorYearでエントリを抽出して新しい.bibファイルに入れる簡単なスクリプト(できればシェルスクリプト)を書くことです。 AuthorYearによるエントリの最初の文と最後の1回のクローズ}で認識でき、おそらくsedエントリの抽出に使用できると想像できますが、正確にこれを行う方法がわかりません。誰かが私にこれをどのように達成するかを教えてもらえますか? それはおそらく次のようなものでなければなりません sed -n "/AuthorYear/,/\}/p" file.bib しかし}、エントリの最初の項目が閉じているため、この出力は停止します。 @ARTICLE{AuthorYear, item = {...}, したがって、これが}行の唯一の文字であるかどうかを認識し、これが当てはまる場合にのみ「sed」で読み取りを停止する必要があります。

6
より良い貼り付けコマンド
私は次の2つのファイルを持っています(ファイルのすべての行が同じ幅になるように行にドットをパディングし、より明確にするためにfile1をすべて大文字にしました)。 contents of file1: ETIAM...... SED........ MAECENAS... DONEC...... SUSPENDISSE contents of file2 Lorem.... Proin.... Nunc..... Quisque.. Aenean... Nam...... Vivamus.. Curabitur Nullam... file2がfile1より長いことに注意してください。 このコマンドを実行すると: paste file1 file2 私はこの出力を取得します ETIAM...... Lorem.... SED........ Proin.... MAECENAS... Nunc..... DONEC...... Quisque.. SUSPENDISSE Aenean... Nam...... Vivamus.. Curabitur Nullam... 出力を次のようにするにはどうすればよいですか? ETIAM...... Lorem.... SED........ Proin.... MAECENAS... Nunc..... DONEC...... Quisque.. …

3
awkを使用して最後の行を最初に処理する
awk最後のデータポイントに基づいて、を使用して正規化するデータファイルがあります。そのため、私は最初に最後のデータポイントにアクセスし、データを正規化してから、正常に処理したいと考えています。 次の方法は、tac2回使用するとうまくいきますが、おそらく必要以上に複雑です。 $ cat file 0 5 1 2 2 3 3 4 $ tac file | awk 'NR==1{norm=$2} {print $1, $2/norm}' | tac 0 1.25 1 0.5 2 0.75 3 1 私の質問は次のとおりです。awkのみを使用して上記の結果を取得することは可能ですか? 答えは「いいえ、awkはファイルを1行ずつスキャンします」と思いますが、代わりの方法を提案します。

12
空の行を削除するためにテキストファイルをフィルタリングする良い方法は何ですか?
空の行がたくさんある(Macの).csvファイルがあります。例: "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ","2","3","4" "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum …

4
bashで2つの文字列の重複を見つけるにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Unix&Linux Stack Exchangeのトピックとなるようにしてください。 5年前に閉鎖されました。 弦が2本あります。例として、これらは次のように設定されています。 string1="test toast" string2="test test" 私が欲しいのは、弦の始めから始まるオーバーラップを見つけることです。オーバーラップとは、上記の例では文字列「test t」を意味します。 # I look for the command command "$string1" "$string2" # that outputs: "test t" 文字列であった場合、string1="atest toast"; string2="test test"チェックは最初から始まり、「a」はの最初から始まるため、文字列は重複しませんstring1。

7
`highlight`コマンド
文字列全体をstdoutに渡しながら、stdin内の特定の文字列を(色、太字のテキスト、または反転したバック/フォアグラウンドで)簡単に強調表示するために使用できるコマンドはありますか?私はそれを構築することを考えていますが、それがすでに存在する場合はむしろそれを使用したいです。いくつかの望ましい機能: 個別のハイライト文字列は、自動的に別の方法でハイライトされます。たとえば、手動で設定しない場合、最初の文字列は赤、2番目は緑、3番目は青で強調表示されます。 カラーサポートを検出し、太字/反転/その他の強調表示方法が利用できる場合はそれらにフォールバックします。 正規表現とリテラル文字列のマッチングを可能にします。 "foobar"と "barbar"のように、一致が重複する場合は、賢い処理を行うことが望ましい。 カラーコードの追加を除いて、stdinとstdoutの間で何も変更されません。

6
改行で終わらないかもしれない行指向のファイルを読む
/tmp/urlFile各行がURLを表すという名前のファイルがあります。次のようにファイルから読み取ろうとしています: cat "/tmp/urlFile" | while read url do echo $url done 最後の行が改行文字で終わっていない場合、その行は読み取られません。なんでかしら? 新しい行で終わるかどうかに関係なく、すべての行を読み取ることはできますか?

2
sed-複数のファイルに変更を適用
「</foo:bar>」を含む何百ものファイルがあります cc bb aa </foo:bar> dd xx vv 一度に全部変えたい cc bb aa </foo:bar> 正確なファイル名を指定すると、sedはうまく機能します sed -i "/ </ foo:bar> / q" 99999.txt しかし、一度にすべてを変更しようとすると、結果が得られません。 sed -i "/<\/foo:bar>/q" *.txt

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