次の内容を含むファイルがあります。
ファイル.txt:
661###############20160315###
###########################
###########################
661###############20160316###
###########################
661###############20160317###
###########################
この単一ファイルを開始文字列「661」と日付(2016MMDD)に基づいて複数のファイルに分割し、分割ファイルの名前を20160315.txt、20160316.txtなどに変更したいと思います。たとえば、各分割ファイルには次のものが含まれます。
20160315.txt には以下が含まれます。
661###############20160315########
################################
################################
20160316.txt には以下が含まれます。
661###############20160316########
################################
20160317.txt には以下が含まれます。
661###############20160317#######
###############################
これを実行できるawkコマンドはありますか?
ベストアンサー1
これを行うためのコマンドがあると確信していますが、解決策を提示するのに十分awk
熟練していません。awk
その間、次のように使用できます。
#!/bin/bash
csplit -z tosplit /661/ {*}
for file in xx*; do
newName=$(egrep -o '2[0-9]{7}' $file)
mv $file $newName.txt
done
rm -rf xx*
このファイルtosplit
(例ファイル)はどこにありますか?
661###############20160315###
###########################
###########################
661###############20160316###
###########################
661###############20160317###
###########################
このスクリプト(filesと同じディレクトリにありますtosplit
)を実行すると、3つのファイルが生成されます。
ls 2016031*
20160315.txt 20160316.txt 20160317.txt
...次のようになります。
cat 20160315.txt
661###############20160315###
###########################
###########################
cat 20160316.txt
661###############20160316###
###########################
cat 20160317.txt
661###############20160317###
###########################
ファイル名を指定(?)することもできますが、csplit
それも私の給料を越えることです!