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

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


6
awk-複数の.datファイルの2行目を1つのファイルに出力する
次のような複数のファイルがあります:(実際には80あります) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 2行目がすべて含まれているファイルが必要です。すなわち output.dat 6 9 8 4 これまでのところ、ファイル名をループしますが、その前にファイルを上書きします。たとえば、上記のファイルの出力は次のようになります 8 4 私のシェルスクリプトは次のようになります。 post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

3
タイムスタンプ付きのコマンド履歴を継続的に端末に出力するにはどうすればよいですか?
シンプルなエイリアスを使用して、1つまたは複数のターミナルウィンドウでコマンドの「追跡」を有効にします。 alias trackmi='export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"' 次に、ワークスペースの別のターミナルにある.bash_historyファイルだけを使用しtail -fて、即座にフィードバックを得ます。無制限の履歴 を有効にし、.bashrcの履歴形式​​()を更新しました。もちろん、コマンドはタイムスタンプを表示します。しかし、履歴ファイル自体の形式は次のとおりです。export HISTTIMEFORMAT="[%F %T] "history #1401234303 alias #1401234486 cat ../.bashrc コマンドと同じように、Unix時間を変換してコマンド全体を1行に表示するにはどうすればよいですかhistory。 578 [2014-05-27 19:45:03] alias 579 [2014-05-27 19:48:06] cat ../.bashrc ...そしてそれに従ってください。または、historyコマンドの出力を端末に継続的に出力する方法を見つけますか?

4
sedが終了していない「s」に関するエラーを表示するのはなぜですか?
bashスクリプトに一連のsed置換があり、終了していない「s」コマンドに関するエラーが発生します。sed行は次​​のようになります。 sed -n -e "s/TMPFOO1/$FOO1/" -e "s/TMPFOO2/$FOO2/" -e "s/TMPFOO3/$FOO3/" -e "s/TMPFOO4/$FOO4/" -e "s/TMPFOO5/$FOO5/" /home/foo/template > /home/foo/template/finishedresult しかし、何らかの理由で、bashはこれを好みません。 sed: -e expression #4, char 69: unterminated `s' command ここで何が欠けていますか?SEDに変数を入力させるにはどうすればよいですか?それらはすべて終了しているように見えます。


2
マッチの周囲の文字をgrep
巨大なデータベースダンプ内で検索と置換を行いたいと思っていますが、それは私が発生するはずの動作をしていません。ファイル内のターゲット文字列をgrepして、周囲の8文字程度を確認したいと思います(場合によっては、その数値を調整する必要があるかもしれません)。どうやってやるの? 私が目を見張ることができない理由は、何千とは言わないまでも何百ものマッチがあるからです。文字列を囲むいくつかの文字を取得し、それをuniq何かにパイプして、検索と置換で予期しない動作が発生する理由を確認します。 また、同じ行に複数のマッチがある可能性があります!

5
行末にある「-」で区切られた1つ以上のフィールドを削除します
データgoogleapis.txtを解析します bucket,abc-def-ghi-45gjd4-wwxis bucket,dde-wwq-ooi-66ciow-po22q instance,jkl-mno-1-zzz-68dkakw-oo9w8 disk,pqr-stu-10-kuy-l2oxapw-rp4lt 以下のような結果を期待しています bucket,abc-def-ghi bucket,dde-wwq-ooi instance,jkl-mno-1-zzz disk,pqr-stu-10-kuy -スペースに変更してからこのコマンドを実行する必要があると思います cat googleapis.txt | awk '{$NF="";sub(/[ \t]+$/,"")}1' | awk '{$NF="";sub(/[ \t]+$/,"")}1' 私はこれからそれを取得しましたhttps://stackoverflow.com/a/27794421/8162936 解析後、スペースをハイペン-バックに変更します。 誰かがそれを解析するためのベストプラクティスまたはワンライナーシェルコマンドを知っていますか?皆さんありがとう

5
すべての列にNAを含む行を削除する
次のようなタブ区切りファイルがあります。 gene v1 v2 v3 v4 g1 NA NA NA NA g2 NA NA 2 3 g3 NA NA NA NA g4 1 2 3 2 各行のフィールド数は固定され、同じです。列2から最後までのすべての行のすべてのフィールドがNAである上記のファイルからそれらの行を削除します。次に、出力は次のようになります。 gene v1 v2 v3 v4 g2 NA NA 2 3 g4 1 2 3 2

7
コロンの前にコンテンツを取得する
Linuxにテキストファイルがあり、内容は次のようになっています。 help.helloworld.com:latest.world.com dev.helloworld.com:latest.world.com 以下のようにコロンの前の内容を取得したい: help.helloworld.com dev.helloworld.com どうすればターミナル内でそれを行うことができますか?

4
ファイルの最初と最後を表示するためのBashメソッド
キューベースのクラスターでは、保留中のジョブのキューは、コマンドなどから表示されますshowqueue。 コマンドは、列など、名前などの適切なデータのリストを返しますが、列/データは質問には関係ありません。 私は時々のwatchようwatch showqueueにユーティリティを使用するのが好きです(エイリアスを使用alias watch="watch "して、コマンドのエイリアス展開を強制的に監視します)。最初の数行に重要なデータ(実行中のジョブ)があり、次に保留中のジョブなどがあり、最後にいくつかの重要な要約があります。 ただし、showqueueの出力が画面から消える場合があります(信じられないほど、私は知っています)。理想的には、ファイルの最初と最後を同時に表示できる方法が欲しいです。 私がこれまでに持っている最高のものは:showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2、そしてwatchそのエイリアスで使用することです。 誰かがもう少し柔軟な、または単一のユーティリティを知っていますか?私の解決策は、「...」の改行を複数行にするためのbashループで少し厄介になっています。ターミナルウィンドウのサイズを変更することはまったく適応されていません。 助言がありますか?

2
「e」なしで科学フォーマットを操作する
科学表記法で数値を含むファイルを操作しようとしていますが、e記号はありません。つまり、1.2e+3と書かれてい1.2+3ます。 私がやって考える最も簡単な方法は、awk交換した+とe+使用して、gsub機能を新しいファイルで私の計算を行います。マイナスの場合も同様です。したがって、次のコマンドを使用して簡単な修正を行うことができます awk '{gsub("+", "e+", $1); print $1, $2, $3, $4, $5}' file_in すべての列で同じことを行います。 ただし、ファイルには負の値も含まれているため、少し複雑になります。サンプルファイルは次のとおりです。 1.056000+0 5.000000-1 2.454400-3 2.914800-2 8.141500-6 2.043430+1 5.000000-1 2.750500-3 2.698100-2-2.034300-4 3.829842+1 5.000000-1 1.969923-2 2.211364-2 9.499900-6 4.168521+1 5.000000-1 1.601262-2 3.030919-2-3.372000-6 6.661784+1 5.000000-1 5.250575-2 3.443669-2 2.585500-5 7.278104+1 5.000000-1 2.137055-2 2.601701-2 8.999800-5 9.077287+1 5.000000-1 1.320498-2 2.961020-2-1.011600-5 9.248130+1 5.000000-1 3.069610-3 …

3
sedを使用してテキストファイルの一部とそれに続く行を削除する
次のようにファイルを編集する必要があります。 auto wlx00 allow-hotplug wlx00 iface wlx000 inet dhcp iface wlx000 inet6 auto post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2 auto wlx000 目標は、「iface ... inet6」で始まる行を削除し、スペースで始まる次の数行を削除することです(1つも複数でもかまいません)。 iface wlx000 inet6 auto post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2 残りはそのままにして、次の結果を出します。 auto wlx00 allow-hotplug wlx00 iface wlx000 inet dhcp auto wlx000 私は次のようにしてsedを使って試しました: sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile しかし、それは適切な場所から始まり、最後まで消去するすべてを削除します。選択したifaceテキストの後に、スペースで始まる行を削除したいだけです。

4
スペースで区切るが、バックスラッシュスペースは無視する
5678 [] testing,\ group [] [testing [] ip\ 5.6.7.8 [] launch-wizard-1 0.0.0.0/0 456dlkjfa [] 1.2.3.4 [] test 1.2.3.4/32 4.3.2.0/23 4.3.2.0/23 default 4.3.2.0/23 4.3.2.0/23 launch-wizard-2 0.0.0.0/0 launch-wizard-3 0.0.0.0/0 2.3.4.5/32 [] 上記の最初の列を取得したいのですが、問題は、\ (バックスラッシュスペース)を列の一部として扱う必要があるためawk '{print $1}'です。 5678 testing,\ group [testing ip\ 5.6.7.8 launch-wizard-1 456dlkjfa 1.2.3.4 test default launch-wizard-2 launch-wizard-3 2.3.4.5/32

2
共通のヘッダーを使用して2つのファイルの行をマージするにはどうすればよいですか?
ヘッダーとして存在する共通データに基づいて2つのファイルをマージしたい。 以下はその例です ファイル1 >Feature scaffold1 1 100 g 101 200 g 201 300 g >Feature scaffold2 1 100 g 01 500 g >Feature scaffold3 10 500 g >Feature scaffold4 10 300 g ファイル2 >Feature scaffold1 500 500 r 900 1000 r >Feature scaffold2 200 300 r >Feature scaffold3 100 200 …


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