利用規約の変更について

unixの
「cut」コマンドについて質問があります。

PC環境はwindows7で、unixのコマンドをbusybox_win_32.exeで実行しています。

テキストファイルがフォルダ内に複数あり、それぞれのファイルの1列目と3列目のみが欲しいという状態です。
そのために
____コマンド開始________
cut -d ' ' -f 1,3 1.txt >1.out
____コマンド終了________
と入力してやることによって望んだ列のみが抽出されてきました。

ファイル数が少ない場合には
____コマンド開始________
cut -d ' ' -f 1,3 1.txt >1.out
cut -d ' ' -f 1,3 2.txt >2.out
cut -d ' ' -f 1,3 3.txt >3.out
____コマンド終了________

等と記述したファイルをa.shとして、コマンドプロンプトから(linux環境ならターミナルから)実行すれば望んだ結果が得られています。

数が少ないうちはこれで対処ができるとは思うのですが、ファイル数がたくさんになった場合、自動でフォルダ内の*.txtファイルに対してコマンドを実行させる方法はないものでしょうか?
.txtファイルと.outファイルの拡張子前の名前は同一が良いです。

方法を教えてください。

A 回答 (4件)

こんなのでいけるんじゃないかと



---
for file in `ls *.txt`
do
cut -d ' ' -f 1,3 $file > `basename $file .txt`.out
done
---
    • good
    • 0

>こちらだとリストアップせずに、txtを直接読ませるという感じになるのでしょうか?



(実行時に)シェルが展開してくれる。
ということかと。

ファイル名に半角スペースがあったりすると面倒なことになるかも知れませんが。
# `ls *.txt`の方がダメらしい…
# https://qiita.com/daei/items/76635f9fbf25824b525e
# basenameやリダイレクトする時も面倒な事になりそうですな。(半角スペース込みのファイル名は使用しない。という運用で逃げるとか)
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2018/03/30 17:40

for file in `ls *.txt`


よりも
for file in *.txt
の方がシンプルかと>#2.

まじめにやると面倒だけどね.
    • good
    • 0
この回答へのお礼

こちらだとリストアップせずに、txtを直接読ませるという感じになるのでしょうか?
色々と書き方があるのですね。

お礼日時:2018/03/30 16:05

それはcutコマンドの問題ではない…かと思いますけど……。



>等と記述したファイルをa.shとして、コマンドプロンプトから(linux環境ならターミナルから)実行すれば望んだ結果が得られています。

ならば、シェルスクリプトで処理する内容かと。
for文で「特定のディレクトリ下のファイルに対して」というシェルスクリプトの例が見つけられるでしょう。

>.txtファイルと.outファイルの拡張子前の名前は同一が良いです。
basenameコマンドで拡張子を取り除く方法も見つかるでしょう。
    • good
    • 0
この回答へのお礼

助言ありがとうございます。
検索語句として検索してみます。

お礼日時:2018/03/30 15:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報