人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: spin6536
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● monyo
●25ポイント

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

#!/usr/bin/awk -f

BEGIN {

prevline = ""

}

{

print $0

if ( $0 == prevline ) {

print ">"

}

else

prevline = $0 ""

}

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


$ cat text.txt | ./script.awk

とかでいけませんか

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

◎質問者からの返答

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

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

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

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


2 ● G.Age
●25ポイント

gawkを使えばできます。

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

{
 if (NR == 1) {
 str = $0;
 } else if ($0 != str) {
 print ">";
 str = $0;
 }
 print $0;
}

3 ● y-kawaz
●25ポイント

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


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

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

2行毎、ならこんな感じ

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

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

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

◎質問者からの返答

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

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


4 ● y-kawaz
●25ポイント ベストアンサー

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

ならこれで

cat a.txt | awk '(1<FNR && t!=$2){print ">"} {print; t=$2}'
◎質問者からの返答

ありがとうございます!

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ