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

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

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

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

Linux

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

UNIX

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

Q&A

解決済

4回答

1310閲覧

ファイル処理のスクリプト作成について

yone_yone

総合スコア28

シェルスクリプト

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

Linux

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

UNIX

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

0グッド

2クリップ

投稿2018/10/01 06:47

linuxでの処理についての質問になります。

text1のようなファイルの中身をtext1revのように処理できるスクリプトをしたいと考えています。

text1

1りんご 2aaa bbbb ccc 3aaa bbbb ddd 4aaa bbbb eee 5 6バナナ 7aaa dddd ccc 8aaa dddd eee 9aaa dddd fff 10 11ぶどう 12rrr vvv mmm 13rrr iii mmm

text1rev

1りんご aaa bbbb ccc 2りんご aaa bbbb ddd 3りんご aaa bbbb eee 4 5バナナ aaa dddd ccc 6バナナ aaa dddd eee 7バナナ aaa dddd fff 8 9ぶどう rrr vvv mmm 10ぶどう rrr iii mmm

※ご回答いただいた内容に質問させていただくこともあるかと思いますので、
※よろしければご返信いただければと思います。

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

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

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

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

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

dice142

2018/10/01 06:56

ご自身で書いたものをご提示ください。この内容ですと非推奨の質問(丸投げ)になってしまいます。
showkit

2018/10/01 07:00

text1 を text1rev にする法則はいくつか考えられますが、質問者さんの意図する法則を ご提示しては? 内容によっては スクリプトでもできるでしょうし、スクリプトで処理するには面倒すぎる可能性もあります。
t_obara

2018/10/01 07:08

スクリプトと考える範囲もご提示されるとよろしいかと。sedは良いけど、awkはダメとか。
yone_yone

2018/10/01 07:57

追加、修正の依頼ありがとうございます。今まではエクセルで行っていたのですが、様々なファイルを扱うゆえに全て自動で処理しようと考えています。なので、スクリプトでこのような処理ができればと思ってawkなりsedなりを使っていこうと考えています。簡単な問題になっていますが、何卒アイデアがいただければと思います。
dice142

2018/10/01 08:05

既に回答があるように提示された形式に関しては可能ですが、様々なファイルを扱うのであれば拡張必須ではないかと推測します。そうなった場合に対処できるよう一度ご自身でやってみた方が良いかと思います。
yone_yone

2018/10/01 08:10

拡張については自分で様々な手法を試してみたいと考えております。丁寧なご回答ありがとうございます。
guest

回答4

0

ちょっと訂正、

bash

1$ cat text2 2りんご 3aaa bbbb ccc 4aaa bbbb ddd 5aaa bbbb eee 6 7バナナ 8aaa dddd ccc 9aaa dddd eee 10aaa dddd fff 11 12ぶどう 13rrr vvv mmm 14rrr iii mmm 15 16りんご 17a b c 18d 0 e 19f g h 200 0 i 21 22$ cat text2|awk 'NF==1{a=$1}NF>1&&$0=a" "$0;NF<1' 23りんご aaa bbbb ccc 24りんご aaa bbbb ddd 25りんご aaa bbbb eee 26 27バナナ aaa dddd ccc 28バナナ aaa dddd eee 29バナナ aaa dddd fff 30 31ぶどう rrr vvv mmm 32ぶどう rrr iii mmm 33 34りんご a b c 35りんご d 0 e 36りんご f g h 37りんご 0 0 i

投稿2018/10/01 07:30

編集2018/10/02 11:32
hichon

総合スコア5737

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

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

gm300

2018/10/01 07:35

一行とは渋いっすね。質問者の人は、果たして、$の部分を正しく入力できるかどうか...
otn

2018/10/01 07:47

簡潔にし過ぎて、aaaやbbbのところが、数字の0だと困りますね。 そういうケースがデータに無いのなら良いのですが。
yone_yone

2018/10/02 04:46

回答ありがとうございます。 質問になるのですが、数字の0が入ってしまう場合、 どのような問題が出てしまうのでしょうか。 ちなみにデータにはこのようなケースが含まれていませんでした。
otn

2018/10/02 04:59

りんご a b c d 0 e f g h 0 0 i でやってみてください。
yone_yone

2018/10/02 06:37

回答ありがとうございます。 やってみたところ、出来ないということが分かりました。 しかし、何が原因なのかがわからないです。 もしよろしければ、どの部分が悪さをしているのか ご教授していただければと思います。 自分ではわからないので...
otn

2018/10/02 07:16

数字の0は真偽値としては偽になるからです。
hichon

2018/10/02 11:31

ちょっと長くなりましたが訂正しました。
guest

0

Bash

1while read x 2do 3 if [ -z "$x" ] 4 then echo; a="" 5 elif [ -z "$a" ] 6 then a="$x" 7 else echo "$a $x" 8 fi 9done < ファイル

投稿2018/10/01 07:50

otn

総合スコア84555

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

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

0

ベストアンサー

NF == 0 {print} NF == 1 {l = $1;} NF > 1 {print l,$0;}

で上のscriptをa.awk でセーブして、元の果物の名前等のデータをa.txt でセーブしたとして、
gawk -f a.awk < a.txt

気に入ったら評価してね。gawk がない??

投稿2018/10/01 07:26

編集2018/10/01 07:29
gm300

総合スコア580

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

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

yone_yone

2018/10/01 08:08

回答ありがとうございます。 質問から話が逸れてしまうのですが、 私は今までgawkではなく、awkで実行していたのですが、 gawkのコマンドの方が良いのでしょうか?
gm300

2018/10/01 22:01

私は、gawk だけです。 Linuxの場合は、問題なさそうですが、昔使っていたOSの場合、AWKの実装は、非常に古く、制約が多いものでした。 gawkは、他の言語、使い方の流れに合わせて、現在も拡張が進んでいます。awk, nawk, gawk いくつかありますが、差分を調べるより、自分のやりたいことが楽にできれば良い。というポリシーで考えています。gawk でできない場合は、私のいる業界標準のtcl 、それでも難しい場合は、C++を使っています。
a_saitoh

2018/10/04 08:32

linuxの場合、awkという名前で入っているコマンドはたいていgawkじゃないでしょうか。awk --version でわかります。
guest

0

x.sh

sh

1#!/bin/bash 2 3while read -r a b c 4do 5 if [ "${c}" ]; then 6 echo "${label} ${a} ${b} ${c}" 7 elif [ "${a}" ]; then 8 label=${a} 9 else 10 echo 11 fi 12done < "${1:-/dev/stdin}"

実行例
イメージ説明

lint
イメージ説明

参考情報

  • How to read from a file or stdin in Bash?

https://stackoverflow.com/questions/6980090/

  • シェルスクリプトのlint

https://qiita.com/dharry/items/f593d96c1b0269182922

投稿2018/10/01 15:32

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問