%20%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%80%81%E6%96%87%E5%AD%97%E6%96%87%E5%AD%97%E5%88%97%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%84%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
私は UNIX の人間ではありませんが、あちこちで小さなスクリプトを作成できる程度の知識はありますが、個人的に十分な時間を割くことができないのはこのスクリプトだけです。
ディレクトリ内に約 2000 個のファイルがあり、以下の操作を実行する必要があります。
- 各ファイルには約 3000 件のレコードがありますが、すべて Ctrl M 改行文字で区切られた各ファイルの 1 行にあります。これらを分離する必要があります。
- 各ファイルには、最初の行の 8 文字目から 14 文字目に生成された日付が対応しています。この日付を使用して、ファイル名を XXX_YYYYMMDD_AAA.txt に変更する必要があります。
答え1
dos2unix
ほとんどのシステムには、この操作を実行する必要があるファイルを処理するためにスクリプトで「起動」できる と呼ばれるツールが含まれています。
すべてのファイルがディレクトリ内にある場合は、 を使用しfind
てそれらを見つけて、次のように個別に操作することができます。
$ find . -type f -exec dos2unix {} +
例
このディレクトリ構造があるとします
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
私たちのfind
技術を使用すれば、すべてのファイルが CRLF 行終端を持つ「DOS」ファイルであることを確認できます。
$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile: ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators
そして、すべてを次のように修復します。
$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...
結果は Unix ファイルのみになります:
$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile: ASCII text
./dir1/afile: ASCII text