例えば、201404-201406 の DPC EFファイルがありました。
1 2 3 4 5 6 7 |
myserver@myuser:/home/myuser$ ls -l EFn*.txt -rwxrw-rw- 1 nobody nogroup 167814285 7月 22 10:39 EFn_123456789_1404.txt -rwxrw-rw- 1 nobody nogroup 172074188 7月 22 10:56 EFn_123456789_1405.txt -rwxrw-rw- 1 nobody nogroup 186567502 7月 22 11:10 EFn_123456789_1406.txt -rwxrw-rw- 1 nobody nogroup 198716381 10月 15 19:19 EFn_123456789_1407.txt -rwxrw-rw- 1 nobody nogroup 189570039 10月 17 10:42 EFn_123456789_1408.txt -rwxrw-rw- 1 nobody nogroup 181837707 11月 11 12:46 EFn_123456789_1409.txt |
これらのファイルの先頭に年月(YYYYMM)と tab を追加したい場合は、下記の awkでいけます。
1 2 3 4 5 6 |
awk '{ print "201404 ","\t",$0 }' EFn_123456789_1404.txt > YM_EFn_123456789_1404.txt awk '{ print "201405 ","\t",$0 }' EFn_123456789_1405.txt > YM_EFn_123456789_1405.txt awk '{ print "201406 ","\t",$0 }' EFn_123456789_1406.txt > YM_EFn_123456789_1406.txt awk '{ print "201407 ","\t",$0 }' EFn_123456789_1407.txt > YM_EFn_123456789_1407.txt awk '{ print "201408 ","\t",$0 }' EFn_123456789_1408.txt > YM_EFn_123456789_1408.txt awk '{ print "201409 ","\t",$0 }' EFn_123456789_1409.txt > YM_EFn_123456789_1409.txt |
しかし、ファイルが多い場合、上記のコマンドを手入力するのは間違いやすいし、大変労力が要る作業になります。 もちろん、Excelを使えば、201404のところを列にして、マウスポインターで引っ張ると201409列まで作って、 後はできた内容をテキストエディタへコピーして、tab を space に置換えすれば、できないことはありません。 というか、いままで良くExcelの方法でやって来ました。 では、awk ならどうなるかというと下記の一行コマンドで上記6行のコマンドを作り出せます。簡単でしょう!!!
1 2 |
myserver@myname:/home/myname$ ls -l EFn*.txt | awk '{print "awk \047{ print \"20" substr($9,15,4) " \",\"\\t\",$0 }\047 " $9 " > YM_" $9}' > add_YM.sh myserver@myname:/home/myname$ bash add_YM.sh |
簡単に説明しましょう。 まず ls -l して、ファイルの一覧を出力します。すると9番目のカラム($9、OSによって異なる場合もある)はファイル名になります。 ファイル名から substr関数で 15文字目から4文字を取得します。 後は、\047でシングルクォーテーションすれば、完成です。 (ダブルクォーテーションは \" でエスケープします)