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

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


4
2つの特定の文字または文字列の間のテキストを検索する
次のような行があるとしましょう: *[234]* *[23]* *[1453]* where *は任意の文字列を表します(形式の文字列を除く[number])。コマンドラインユーティリティを使用してこれらの行を解析し、括弧内の数値を抽出するにはどうすればよいですか? より一般的には、このことは、これらのツールのcut、sed、grepまたはawk、そのような作業に適しているでしょうか?

6
代わりに出力にセパレータを保持する「column -t」のようなコマンド
単純なテーブルを編集しています。きれいにフォーマットしてもらいたいです。、、または同様のものを使用できますがtbl、latexこれはやり過ぎのようです。プレーンテキストで十分です。単純なので、ソースを出力にすることもできます。したがって、ソースも見栄えが良いはずです。これは、完璧な仕事のように思えますcolumn -s '|' -t-セパレータを見つけ、各列の最大幅に従って整列するスペースを自動的に挿入します。残念ながら、セパレータは削除されるため、さらに編集した後は再実行できません。出力を入力として機能させるために、これをべき等で実行できる優れたテキスト処理ツールはありますか?または、自分で書く必要がありますか? 編集:ここに私が欲しいものの例があります: foo | bar | baz abc def | 12 | 23456 になるはずです foo | bar | baz abc def | 12 | 3456 ときに' '、セパレータとスペーサの両方があり、column -tうまく動作します。しかし、私のアイテムにはスペースが含まれているため、それを使用することはできません。スペーサーをセパレーターと区別することは、事態を複雑にします。セパレータの隣でセパレータ文字として扱うのは便利だと思いますが、そうでcolumn -s '|' -tはありません(明らかに現在の動作も有用です)。

7
各行を複数回繰り返します
ファイル内の各行を一定回数繰り返したいと思います。 たとえば、各行を4回繰り返します。 a b c になる: a a a a b b b b c c c c 私はいくつかの検索を行いましたが、逆の行に沿って多くの質問と回答があります。たとえば、重複する行を単一の行にマージしたり、再度印刷して行を2倍にしたりします。 Cでこれを行うのは簡単ですが、ネイティブコマンドについてもっと詳しく知りたいので、このような1回限りのスローアウェイにいつも頼る必要はありません。

2
テキストファイルの行の中間セクションを抽出しますか?
私は、大きなテキストファイルを解析して、そこからデータベースの挿入を行うPHPスクリプトを書いています。しかし、私のホストでは、ファイルが大きすぎるため、PHPのメモリ制限に達しました。 ファイルには約16,000行あります。それらをロードできるかどうかを確認するために、(最初に)4つの個別のファイルに分割します。 私が得ることができる最初の部分head -4000 file.txt。中央のセクションは少し複雑です- tail出力をhead(tail -4001 file.txt | head -4000 > section2.txt)にパイプすることを考えていましたが、別の/より良い方法はありますか? 実際、私のロジックはめちゃくちゃです。セクション2では、次のようなことをする必要があり、次のセクションの引数をtail -12001 file.txt | head - 4000下げtailます。私はすでに混乱しています!:P

4
先頭の空白なしでgrepを実行するにはどうすればよいですか?
私は大規模なコードベースを熟読していますが、主要な空白と集計は非常に迷惑なようです。それを取り除く方法はありますか? grep -R "something" ./ たとえば、次の代わりに: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgsomethingdrfg bar/bar.cpp: 1234edwssomethingczd 私は次のようなものを得たいです: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgdsomethingrfg bar/bar.cpp: 1234edwssomethingczd またはそれ以上: foo/bar.cpp: qwertyuisomethingooi foo/bar/baz.h: 43rfsgdrsomethingfg bar/bar.cpp: 1234edwssomethingczd

3
古い古典的なUnixツールキットの教科書を探しています
Unixコマンドラインツールキット(sh、grep、sed、awk、cutなど)に関する本を探しています。それは素晴らしい本でしたが、その名前を完全に忘れました。この特定の本の素晴らしいところは、実行例でした。テキスト処理ツールのみを使用して大学の簿記システムを実装する方法を示しました。grepを使用して名前で生徒を見つけ、sedを使用して成績を更新し、awkを使用して平均成績を計算し、cutを使用してIDに成績を添付します。私の記憶が役立つなら、この本は黒い表紙を持っていて、1980年頃に出版されました。 この本を覚えている人はいますか?私はそれを見つけるのに助けていただければ幸いです。

3
ファイル内の複数行の文字列を置換
ある複数行の文字列を別の複数行の文字列で置き換えることにより、更新したいファイルがいくつかあります。以下の線に沿ったもの: * Some text, * something else * another thing そして、私はそれを次のものに置き換えたいです: * This is completely * different text 結果は、置換後、テキストの最初のブロックを含むファイルに2番目の文字列が含まれるようになります(ファイルの残りの部分は変更されません)。 問題の一部は、ファイルシステムで更新するファイルのリストを見つける必要があることです。私はそのためにgrepを使用することができます(複数行の文字列を使用するのは簡単ではありませんが)sedでパイプすることができますか? これを行う簡単な方法はありますか?Sedはオプションですが、\ nなどを追加する必要があるため厄介です。「このファイルから入力を取得し、それらのファイルで一致させてから、この他のファイルのコンテンツで置き換える」と言う方法はありますか?必要に応じてpythonを使用できますが、すばやく簡単なものが必要なので、利用可能なユーティリティがある場合は、独自のスクリプト(方法を知っています)を作成するよりもむしろそれを使用します。

3
awk:戻りステータスを強制しますか?
これは私の以前の質問のフォローアップです。 この便利なスニペットを使用して、/ etc / passwdのフィールド数を検証しています。次の例では、ユーザー「fieldcount1」と「fieldcount2」のフィールド数が間違っています。 $ awk -F: ' NF!=7 {print}' /etc/passwd fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash:::: fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash: $ echo $? 0 お気づきのとおり、awkは戻りステータス0で終了します。この観点からは、ここでは問題はありません。 このawkステートメントをシェルスクリプトに組み込みたいと思います。エラーであるすべての行を印刷し、戻りコードを1(エラー)に設定したいと思います。 特定の終了ステータスを強制しようとすることができますが、awkは1行のみを出力します。 $ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash:::: $ echo $? 1 awkを強制的に終了ステータス「1」で終了させ、一致するすべての行を印刷できますか?

10
N行ごとに改行文字を削除します
テキストを処理するには、2行ごとに改行文字を削除する必要があります。 サンプルテキスト: this is line one and this is line two the third and the fourth must be pasted too 望ましい出力: this is line one and this is line two the third and the fourth must be pasted too whileループを試しましたが、whileループは悪い習慣です。trまたは他のコマンドを使用して実行できますか?

12
重複行をペアで削除しますか?
今日、このユースケースに出会いました。これは、一見シンプルなようだが、と周りいじるsort、uniq、sedそしてawkそれは自明だことを明らかにしました。 重複行のすべてのペアを削除するにはどうすればよいですか?つまり、指定された行の重複が偶数個ある場合は、それらをすべて削除します。重複する行の数が奇数の場合、1つを除くすべてを削除します。(ソートされた入力を想定できます。) クリーンでエレガントなソリューションが望ましいです。 入力例: a a a b b c c c c d d d d d e 出力例: a d e


4
間にセパレータを追加して2つのテキストファイルを結合しますか?
cat file1 file22つのテキストファイルを結合します。しかし、の間に********************************1 つまたは2つの行のようにセパレータを追加したい場合は、最初のファイルを開いて最後に行を追加するか、2番目のファイルを開いて先頭に行を追加してから実行する必要がありますcatコマンド?コマンドを実行するだけで実行できますか?

2
テキストファイルを減算するUNIXのツール?
セミコロンで区切られた大きなテーブル形式のテキストフィールドで構成される大きなファイルがあります。ソートされています。同じテキストフィールドで構成される小さなファイルがあります。ある時点で、誰かがこのファイルを他のユーザーと連結し、ソートを行って上記の大きなファイルを作成しました。大きなファイルから小さなファイルの行を減算します(つまり、小さなファイルの各行について、一致する文字列が大きなファイルに存在する場合は、大きなファイルのその行を削除します)。 ファイルはおおよそ次のようになります GenericClass1; 1; 2; NA; 3; 4; GenericClass1; 5; 6; NA; 7; 8; GenericClass2; 1; 5; NA; 3; 8; GenericClass2; 2; 6; NA; 4; 1; 等 これを行う簡単な上品な方法はありますか、またはawkを使用する必要がありますか?


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