複数のファイルをgrepして1つのファイルに出力する方法

複数のファイルをgrepして1つのファイルに出力する方法

同じ場所に次の情報を含む3つのファイルがあります。

File1: msisdn, channel, transid, time1

File2: transid, time2, messageid

File3: messageid, status, time3, time4

3つのファイルをgrepして次の形式でテキストファイルに書き込むにはどうすればよいですか?

msisdn|channel|transid|message|status|time1|time2|duration1(time2-time1)|time3|time4|duration2(time4-time3)

ベストアンサー1

BASHここで提案した内容を実行するために、一連のコマンドをファイルに配置できます。選択した基準は非常にカスタマイズされているように見え、明確なロジックに従わないため、各変数を明示的に保存する必要があります。以下は、File1に実際に次の1行のテキストファイルが含まれていると仮定する例です。

123456789, 1, 10, 12345

msisdn、チャネル、transid、time1などに対応し、カンマで区切られます。BASHスクリプトから必要な値を取得する方法の例awkgrepここでは特に便利ではありません)は次のとおりです。

#!/usr/bin/bash

# Define the filenames
File1='filename_of_file1.txt'
File2='filename_of_file2.txt'
File3='filename_of_file3.txt'
OutputFile='filename_of_output_file.txt'

# Grab the Nth column in each respective file
msisdn=$(awk -F, '{print $1}' $File1
channel=$(awk -F, '{print $2}' $File1
transid1=$(awk -F, '{print $3}' $File1
time1=$(awk -F, '{print $4}' $File1
transid2=$(awk -F, '{print $1}' $File2
...
...

# Calculate the difference between certain variables
duration1=$(echo ${time2}-${time1} | bc)
duration2=$(echo ${time4}-${time3} | bc)
...
...

# Return the formatted string to an output file
echo "${msisdn}|${channel}|${transid}..." > $OutputFile

これは明らかに不完全です(すべての部分が表示されます...)。ただし、少なくとも非常に明確で具体的な方法で問題を解決できる方法のテンプレートを表示する必要があります。

おすすめ記事