여러 파일을 grep하여 하나의 파일로 출력하는 방법

여러 파일을 grep하여 하나의 파일로 출력하는 방법

동일한 위치에 다음 정보가 포함된 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, 채널, 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

이는 분명히 불완전합니다(모든 부분이 표시됨 ...). 그러나 최소한 매우 명확하고 구체적인 방법으로 문제를 해결할 수 있는 방법에 대한 템플릿을 보여주어야 합니다.

관련 정보