人気マンガがだれでも無料♪電子コミック読み放題!!

diff結果の差分の行数を出力するコマンドを教えてください。

たとえばaaa.txtとbbb.txtのdiff比較をした場合
aaa.txtから見たbbb.txtとの差分の行数

bbb.txtから見たaaa.txtとの差分の行数

よろしくお願いいたします。

A 回答 (1件)

単純に diff の結果(例えば side by side として)をリダイレクトして < で始まる行の数とかを数えたらいいのでは?



diff file1.txt file2.txt | grep -c -e "^<"

な感じで。

「差分の行数」というのをどう数えたいのかよくわかりませんが。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qソースコードの差分がある行番号を出力するには?

ソースコードを修正したときに、変更箇所のイメージではなく、
変更箇所について修正行番号を出力する方法はありませんでしょうか?

例えば以下のようなことです。
  修正前ファイル(file_old.c)
    1: aaaaa
    2: bbbbb
    3: ccccc
    4: ddddd
    5: eeeee

  修正後ファイル(file_old.c)
    1: aaaaa
    2: bbbbb
    3: CCCCC
    4: ddddd
    5: EEEEE

 このときに、変更詳細では無く、「3行目と5行目が変更されている」という情報が欲しいのです。

現在は、DFとかRekisaを使用して、変更箇所をハイライト表示して、
手作業で、「20行目と28行目、50行目が修正されているな」と確認しています。
修正箇所が少ないうちは、そんなに手間じゃないのですが、
100ステップ単位で修正したときなどは、修正箇所のピックアップが面倒だなぁと。

何か良い方法やツールありませんでしょうか?

ソースコードを修正したときに、変更箇所のイメージではなく、
変更箇所について修正行番号を出力する方法はありませんでしょうか?

例えば以下のようなことです。
  修正前ファイル(file_old.c)
    1: aaaaa
    2: bbbbb
    3: ccccc
    4: ddddd
    5: eeeee

  修正後ファイル(file_old.c)
    1: aaaaa
    2: bbbbb
    3: CCCCC
    4: ddddd
    5: EEEEE

 このときに、変更詳細では無く、「3行目と5行目が変更されている」という...続きを読む

Aベストアンサー

「グラフィカルでない」というところに思わず反応してしまった。
UNIX系のコマンドだけどdiffコマンドはだめでしょうかねえ。
 C:\hoge> diff file_old.c file_new.c
 3c3
 < ccccc
 ---
 > CCCCC
 5c5
 < eeeee
 ---
 > EEEEE

念のため説明すると「3c3」の'c'は変更された(changed)ことを示す。
cの左はfile_old.cの行番号、右はfile_new.cの行番号です。

行番号だけ表示するというのはちょっと面倒だけど、行番号のところだけまとめるのは簡単にできる。
 C:\hoge> diff file_old.c file_new.c | sort
 ---
 ---
 < ccccc
 < eeeee
 > CCCCC
 > EEEEE
 3c3
 5c5

ファイルに出力すれば編集もできる。
 C:\hoge> diff file_old.c file_new.c | sort > hogehoge.txt

うーん。もっといいやり方があるんだろうけどね。簡単な方法が浮かばない。

参考URL:http://www.vector.co.jp/soft/winnt/util/se015010.html

「グラフィカルでない」というところに思わず反応してしまった。
UNIX系のコマンドだけどdiffコマンドはだめでしょうかねえ。
 C:\hoge> diff file_old.c file_new.c
 3c3
 < ccccc
 ---
 > CCCCC
 5c5
 < eeeee
 ---
 > EEEEE

念のため説明すると「3c3」の'c'は変更された(changed)ことを示す。
cの左はfile_old.cの行番号、右はfile_new.cの行番号です。

行番号だけ表示するというのはちょっと面倒だけど、行番号のところだけまとめるのは簡単にできる。
 C:\hoge> diff file_old.c...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qソースの追加行数と変更行数

手元に、win mergeと、Subversionと、DFがあります。

昨日書いたソースと、今日書いたソースがあるとき、
新規に追加された行数と、変更された行数を知りたいです。

みんなに欲されていそうな機能ですし、どれかしらに、何かしらのメニューがあるんじゃないかと思っているのですが、見つけられずにいます。。

ご存知でしたらご教授下さい。

Aベストアンサー

svn diff
http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.diff.html
TotoiseSVN なら
http://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/tsvn-dug-diff.html
で差分を取る。

行数が出るかどうかは、その差分ツール次第。
あるいは、行数を数えるような差分ツールを作る。

というところではないかと。


あと
比較アルゴリズムによって、
・「修正」なのか「削除して追加」なのか
・「変更無し」なのか、「たまたま同じ内容に『修正』された」なのか
といったことが変わるので、行数数えるのはそんなに深い意味は無いように思います。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Qbashなどのシェル変数の値に改行を含める事は可能でしょうか?

タイトルの通りですが、通常のシェル変数の値として

 [prompt]$ aaa="bbb<改行>ccc"

のようなセットを行い、

 [prompt]$ echo $aaa
 bbb
 ccc
 [prompt]$

のような結果を得たいのですが、可能でしょうか。

Aベストアンサー

可能です.
というか,やってみたら出来ることがわかると思います.こんなところで聞くより早い.
なお,sh/bash系では改行文字は特にエスケープせずそのまま入れられます.

aaa='bbb
ccc'

Qsedなどで、特定の文字列の後の文字列を抽出したい

sedなどで、特定の文字列の後の文字列を抽出したい

シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか?

たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。

echo abcXYZ123defghi | sed ...

のようにして実行させたいです。

Aベストアンサー

日本語対応sedだと日本語数字混じりでもできますね。

echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/' -e 'y/0123456789/0123456789/'
12357

※ 使っている日本語コードの指定は必要かも(例えば、 --ctype=EUC)

echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/'
12357

※ 入力フォームに書いている時はASCIIと日本語の判別がし易いけど回答見るとわかり難いですね。後ろの例での結果57とy/0123456789/の数字部分が日本語です。

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング