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

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

新規登録して質問してみよう
ただいま回答率
85.46%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

1回答

784閲覧

ShellScript にて列指定して文字検索

Utoshi

総合スコア14

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2020/04/02 02:53

シェルスクリプトにて列指定して文字列検索を行いたいです。

例)Test-text.txtから5列目に「X」がある場合カウント

Test-text.txt
ABCDEFGHIJ
ABCDXFGHIJ
ABCDXGHIJK
BGCDFQPWD

出力
文字列:40
Xの個数:2

のようにしたいです。

————備考————
substr() などを使って処理を行おうと思いましたが、全く分からないです。

for (i=1, i<=全体行? i++){
*ここに列指定を記述?
if (??? = X) {
count++
}
}

ソースを作成してだけたら嬉しいですが、ヒント等頂けたら幸いです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

5列目というか、行の5文字目ですよね?

sh

1grep '^....X' Test-text.txt | wc -l #=> 2 2grep -o . Test-text.txt | wc -l #=> 39

awkで書くなら、

Awk

1{if(substr($0,5,1)=="X") X++ 2 LEN+=length($0) 3} 4END{print X, LEN}

投稿2020/04/02 03:12

otn

総合スコア84798

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

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

Utoshi

2020/04/02 07:52

>otn さん 回答ありがとうございます。 ちなみにですが、ksh で動かす場合はどのように書けば宜しいでしょうか? 分からない事ばかりで申し訳ございません。
Y.H.

2020/04/02 07:55 編集

> ksh で動かす場合 やってみました?そのまま実行できます。
Utoshi

2020/04/02 08:13

#!/bin/ksh {if(substr($0,5,1)=="X") X++ LEN+=length($0) } END{print X, LEN} で記述したところ三行目にて構文エラーになりました。 If あとにスペースなどを入れましたが変わらずエラーでした。
Y.H.

2020/04/02 08:23

それはawkなのでawkコマンドに渡しましょう。 awk '{if(substr($0,5,1)=="X") X++; LEN+=length($0); }END{print X, LEN}' Test-text.txt 前者(grep)は?
Utoshi

2020/04/02 08:40

grep は問題なく実行できました。 awk '{if(substr($0,5,1)=="X") X++; LEN+=length($0); }END{print X, LEN}' Test-text.txt を実行すると空白のまま止まります 。
Y.H.

2020/04/02 09:00 編集

特に問題ないですけどね。。。 $ cat ./test.ksh #!/usr/bin/ksh awk '{if(substr($0,5,1)=="X") X++; LEN+=length($0); }END{print X, LEN}' Test-text.txt $ ./test.ksh 2 38 $ awk --version GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2) Copyright (C) 1989, 1991-2016 Free Software Foundation. $ ksh --version version sh (AT&T Research) 93u+ 2012-08-01
Y.H.

2020/04/02 08:59

> grep は問題なく実行できました。 であればgrepの方採用でいいと思いますよ
otn

2020/04/02 12:37

awkを知らなかったんですね。 > substr() などを使って処理を行おうと思いましたが、 って、awkで書いているつもりなのかとばかり思っていました。 どの言語のつもりだったんですかね。
Utoshi

2020/04/03 00:18

>Y.H.さん ご教授有難うございました。
Utoshi

2020/04/03 00:19

>otnさん substrはやり方を検索して出てきたので使えるのかな?って感覚で書いていました。 混乱させてしまい申し訳ございません。
otn

2020/04/03 00:54

grepで、位置が100文字目とかなら、 egrep '^.{99}X' ~~ で。
Utoshi

2020/04/03 01:09

>otnさん grepもそんな書き方があるんですね... ちなみにですが、awkで実行しても空白にしかならない(ctrl + Cで強制終了)のは何が原因か心当たりなどありますか?
otn

2020/04/03 16:33

タイプミスでは? Y.H.さんのコメントのコードを1行全部コピペして無修正で実行していますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問