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

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

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

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

3回答

1103閲覧

awkのif内で$3==/(1|2)/としても$3==1と同じ動きをする。

kitsune_42

総合スコア15

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2020/09/04 12:19

編集2020/09/04 13:00
列1列2
1a
1b
2c
2d
3e
3f

result.tsv

linux

1cat result.tsv | awk '{if($1==/(1|2)/) print$0}' 2

macのterminalで上のような処理を行うと、

1 a
1 b

とだけ表示されます。
1 a
1 b
2 c
2 d
正規表記を用いてこのように表示させたいのですが、どうすれば良いのでしょうか。

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

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

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

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

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

guest

回答3

0

いやいや、もっと簡単な話ですよ。

[user@host] ~/programing/shell_work]$ cat awktest.awk
1 a
1 b
2 c
2 d
3 e
3 f
[user@host] ~/programing/shell_work]
[user@host] ~/programing/shell_work]$ awk '/1|2/{print}' awktest.awk
1 a
1 b
2 c
2 d
[user@host]

投稿2020/09/04 12:57

編集2020/09/04 13:01
hana_yama_san

総合スコア923

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

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

kitsune_42

2020/09/04 13:07

if使わないということですね、ありがとうございます。 今回はやりたい作業の最終がこれではなかった為、他の方をベストアンサーにいたしましたが、今回の作業を行うのであればこれが一番だと思いました。
hana_yama_san

2020/09/04 13:12

awkでは/〜/で正規表現になりますし、シンプルなのが良いという観点に立てば、 ぜひ参考にしてください。
guest

0

質問記載のコードではifの条件部の閉じ括弧())がないのでエラーになりますね。
また、1カラム目が2桁以上の可能性があるなら(11とか22とかを除外したいなら)
こんな感じですかね。

if文でやるなら
cat result.tsv | awk '{if ($1 ~ /^(1|2)$/) {print $0}}'

これでも可
cat result.tsv | awk '/^(1|2)\s/{print $0}'
printを省略してこれでも可
cat result.tsv | awk '/^(1|2)\s/'


解決済みで蛇足ですが実行結果追記

bash

1$ cat result.tsv 21 a 31 b 42 c 52 d 63 e 73 f 819 aa 929 cc 1091 xx 1192 yy 12$ cat result.tsv | awk '{if ($1 ~ /^(1|2)$/) {print $0}}' 131 a 141 b 152 c 162 d 17$ cat result.tsv | awk '/^(1|2)\s/{print $0}' 181 a 191 b 202 c 212 d 22$ cat result.tsv | awk '/^(1|2)\s/' 231 a 241 b 252 c 262 d

投稿2020/09/04 12:34

編集2020/09/04 13:14
Y.H.

総合スコア7914

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

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

kitsune_42

2020/09/04 13:04

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

0

ベストアンサー

正規表現マッチの演算子は、==じゃなくて~です。

投稿2020/09/04 12:23

otn

総合スコア84802

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

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

otn

2020/09/04 12:32

~ や !~ の右辺以外に /(1|2)/ のような正規表現が現れたら、($0 ~ /(1|2)/) と同価です。 つまり、入力行のどこかに1か2があれば1、どちらもなければ0を意味します。
kitsune_42

2020/09/04 13:03

それでした。。。 正規表現への理解が深まりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問