複数のファイルを単一のファイルにマージし、各ファイル名の一部を追加します。

複数のファイルを単一のファイルにマージし、各ファイル名の一部を追加します。

数百のファイルがあり、各ファイルには数値エントリ(たとえば5243564)が含まれています。各ファイル名には、識別子(FT、FM、FAなど)と日付(例FT.20180315.txt:)があります。

一意の識別子ファイルと番号付き項目を日付とともに1つのファイルに結合したいと思います。したがって、単一のFTファイルは次のようになります。

20180315 5243564
20180316 1234566

など

これにより、次のことができますcat *FT* > FT.txt

ただし、これは各ファイルの日付を取得しません。

答え1

一文でawk作業が完了します。

awk '{ printf("%s %s\n", substr(FILENAME, 4, 8), $0); }' FT.*.txt > FT.txt

お知らせいただいた例をもとにテストしてみました。必要に応じて調整してください。

答え2

以下は、必要なタスクを実行する簡単なスクリプトです。ミニマリストですが、基本的な手順を示しています。このスクリプトが次のように呼び出されるとします。combine.sh

#!/bin/sh

#Add logic for better parsing of args.
IDENT=$1
SEARCHDIR=$2

# For each file in the Search Directory
# that starts with the Unique Identifier...
for f in "$SEARCHDIR/$IDENT"*; do

   datestr=$(echo "$f" | cut -d '.' -f2)
   value=$(cat "$f")
   echo "$datestr $value"
done

これで簡単にこれを行うことができます:

$> combine.sh FT /path/to/my/datadir > FT.txt

関連情報