UNIX系のコマンドを使って、テキストファイルを次のように書き換えたいと思っています。条件に合う場所に">"と改行を入れていきたいだけなのですが、どのようにできるでしょうか。


(元のファイル)
1 1
1 1
1 2
1 2
1 3
1 3

(結果として得たいファイル)
1 1
1 1
>
1 2
1 2
>
1 3
1 3

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/09/24 19:12:21
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y-kawaz No.4

回答回数1422ベストアンサー獲得回数226

ポイント25pt

>二列目の数字が変わるところ

ならこれで

cat a.txt | awk '(1<FNR && t!=$2){print ">"} {print; t=$2}'
id:spin6536

ありがとうございます!

2011/09/24 19:11:55

その他の回答3件)

id:monyot No.1

回答回数146ベストアンサー獲得回数18

ポイント25pt

要件がいまいちわからない点もありますが、以下のようなスクリプトを作成の上、実行属性をつけて、

#!/usr/bin/awk -f

BEGIN {

prevline = ""

}

{

print $0

if ( $0 == prevline ) {

print ">"

}

else

prevline = $0 ""

}

テキストファイルが text.txt で、スクリプトファイルが script.awk だとすると


$ cat text.txt | ./script.awk

とかでいけませんか

やってるのは、ある行の内容が直前の行と同じ場合は、次の行に「>」を出力するというだけです。

id:spin6536

回答ありがとうございます。

例として挙げた内容が全くよくありませんでした。恥ずかしい...

訂正させていただくと、二列目の数字が変わるところに">"の行を挿入するスクリプトを書きたいと思っています。二列目に同じ数字が続く回数は不定です。

方法がありましたら、もしよろしければまた回答していただけるでしょうか。

2011/09/24 18:55:02
id:GundamAGE No.2

回答回数17ベストアンサー獲得回数1

ポイント25pt

gawkを使えばできます。

awkスクリプトを以下に示します。

{
    if (NR == 1) {
        str = $0;
    } else if ($0 != str) {
        print ">";
        str = $0;
    }
    print $0;
}
id:y-kawaz No.3

回答回数1422ベストアンサー獲得回数226

ポイント25pt

条件ってなんですか?それによって全く答えが変わります。


前の行と内容が変わったら、ならこんな感じ

cat a.txt | awk '(1<FNR && t!=$_){print ">"} {print; t=$_}'

2行毎、ならこんな感じ

cat a.txt | awk '(1<FNR && FNR%2==1){print ">"} {print}'

やりかたはいくらでもあります。

別にawkじゃなくても良いですが、条件が分からないと何が一番簡単にできるかも変わります。

id:spin6536

そうですよね。ばかでした。

最初の方の回答への返信にも書きましたが、二列目の数字が変わるところに">"の行を挿入するスクリプトを書きたいと思っています。二列目に同じ数字が続く回数は不定です。

2011/09/24 18:57:37
id:y-kawaz No.4

回答回数1422ベストアンサー獲得回数226ここでベストアンサー

ポイント25pt

>二列目の数字が変わるところ

ならこれで

cat a.txt | awk '(1<FNR && t!=$2){print ">"} {print; t=$2}'
id:spin6536

ありがとうございます!

2011/09/24 19:11:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません