質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

2回答

302閲覧

bash: 範囲が重複する行を抽出したい

pwq

総合スコア23

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2022/05/09 05:15

下記の様な1行にint型の数字が2つ並んだファイルから、範囲が重複している行のみを抽出したいです。どのようにすれば解決できるでしょうか?

条件:
・一列目と二列目の大小関係は逆転している場合がある
・一列目と二列目の値は必ず異なっている

例: この場合、(10,8)(11,12)以外の行を抽出する
A B
1 3
2 4
7 3
10 8
11 12
13 14
16 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

bash

1awk 'NR>1{$0=$0 FS (($1>$2)?($2 FS $1):$0)}1' interval.dat | 2sort -k3,4n | 3awk ' 4 NR==1{print;next} 5 NR>1 && s && e && (e>=$3){ 6 print s0 FS e0; print $1 FS $2 7 } 8 {s0=$1;e0=$2;s=$3;e=(e<$4?$4:e)} 9' | uniq 10 11# 12A B 131 3 142 4 157 3 1613 14 1716 13

投稿2022/05/09 14:03

編集2022/05/09 14:37
melian

総合スコア19705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pwq

2022/05/09 14:51

ありがとうございます!
guest

0

bash

1input=() 2work=() 3 4while read line 5do input+=("$line") 6 w=($line) 7 work+=("$(seq -s' ' $(echo ${w[0]}$'\n'${w[1]} | sort -n ))") 8done < input.txt 9 10for((i=0; i<${#input[@]}; i++)) 11do dup=0 12 for x in ${work[i]} 13 do for y in ${work[@]} 14 do if [ $x = $y ] 15 then let dup++ 16 fi 17 done 18 done 19 w=(${work[i]}) 20 if [ "$dup" != "${#w[@]}" ] 21 then echo "${input[i]}" 22 fi 23done

1 3
2 4
から
1 2 3
2 3 4
のような範囲内の連続数値のリスト${work[i]}を作って、
その行の中の1つの数字xでも、リスト全体${work[@]}の中に複数回出てきたら除外します。
例えば、2 3 4は3個なので、リスト内出現カウント数dupが3なら重複がなかったと言うこと。

投稿2022/05/09 06:15

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問