我在同一位置有 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 实际上包含一个文本文件,其中一行如下所示:
123456789, 1, 10, 12345
对应msisdn、channel、transid、time1等,用逗号分隔。如何在BASH
脚本中获取所需值的示例awk
(grep
此处不是特别有用)如下所示:
#!/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
这显然是不完整的(所有部分都标有...
)。然而,它至少应该显示一个模板,说明人们如何以非常明确和具体的方式解决这个问题。