한 파일의 데이터를 다른 파일에 추가

한 파일의 데이터를 다른 파일에 추가

그래서 다음과 같은 CSV 파일을 생성하는 스크립트가 있습니다.

Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity
1800 UTC MAY 16,
0000 UTC MAY 17,
0600 UTC MAY 17,
1200 UTC MAY 17,
1800 UTC MAY 17,
0000 UTC MAY 18,
0600 UTC MAY 18,
1200 UTC MAY 18,
1800 UTC MAY 18,
0000 UTC MAY 19,
0600 UTC MAY 19,
1200 UTC MAY 19,
1800 UTC MAY 19,
0000 UTC MAY 20,
0600 UTC MAY 20,
1200 UTC MAY 20,
1800 UTC MAY 20,
0000 UTC MAY 21,

내가 원하는 것은 아래 두 번째 이미지에 표시된 것처럼 다른 파일의 데이터를 추가하고 일치하도록 각 줄의 끝에 추가할 수 있도록 코드를 편집하는 것입니다.

28.0
28.9
29.6
30.3
31.0
31.9
33.1
34.4
35.5
36.2
36.8
37.0
36.9
36.2
35.5
34.6
33.7
32.8

내 현재 코드는 다음과 같습니다.

#! /bin/bash
inputFileString=$1
outputFileString=$2
touch "$2"
chmod 755 "$2"
echo "" > lat.txt
sed -i '1d' lat.txt
rm $2
test=(0,1,2,3,4,5,6,7,8,9)
echo "Converting $inputFileString -> $outputFileString ..."
echo "" >  $2
awk -F '[<>]' '/<lat>/ {print $3}' $1 >> lat.txt
grep -Eo '<dtg>.*</dtg>' $1 | cut -c 6-20  >> $2
sed -i 's/$/,/' $2
#awk '{print $0, "$variable"}' $2 >> $2
#awk -F '[<>]' '/<lon>/ {print $3}' $1 >> $2
sed -i '1d' $2
sed -i '1i Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity' $2
echo Done!

참고로 내 코드는 kml 파일의 입력을 받아들이고 특정 데이터를 추출하고 해당 데이터를 사용하여 csv 파일을 생성합니다.

답변1

Raku(이전 Perl_6) 사용

raku -e 'my @a = @*ARGS[0].IO.lines.skip; my @b = @*ARGS[1].IO.lines;
         "Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity".put; 
         .put for [Z] @a, @b;' ethan1.txt ethan2.txt

예제 출력:

Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity
1800 UTC MAY 16, 28.0
0000 UTC MAY 17, 28.9
0600 UTC MAY 17, 29.6
1200 UTC MAY 17, 30.3
1800 UTC MAY 17, 31.0
0000 UTC MAY 18, 31.9
0600 UTC MAY 18, 33.1
1200 UTC MAY 18, 34.4
1800 UTC MAY 18, 35.5
0000 UTC MAY 19, 36.2
0600 UTC MAY 19, 36.8
1200 UTC MAY 19, 37.0
1800 UTC MAY 19, 36.9
0000 UTC MAY 20, 36.2
0600 UTC MAY 20, 35.5
1200 UTC MAY 20, 34.6
1800 UTC MAY 20, 33.7
0000 UTC MAY 21, 32.8

위 내용은 Perl 계열의 프로그래밍 언어인 Raku로 작성된 답변입니다. 타임스탬프 파일은 명령줄에서 읽습니다 @*ARGS[0](타임스탬프 헤더 줄은 skip-ped되고 나중에 다시 추가됩니다). 숫자 열은 명령줄에서 로 읽혀집니다 @*ARGS[1]. 각 파일은 객체로 변환되고 IO분해되어 lines배열 @asum 으로 저장됩니다. 그런 다음 @b합계는 요소별로 함께 압축 됩니다 .@a@b[Z]put

https://docs.raku.org/routine/Z
https://raku.org

답변2

당신이 무엇을 기대하고 있는지 확실하지 않지만 paste이것이 당신이 찾고 있는 것이라고 생각합니다.

sed '1s!^!\n!' another.txt | paste -d '\0' input.csv -
Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity
1800 UTC MAY 16,28.0
0000 UTC MAY 17,28.9
0600 UTC MAY 17,29.6
1200 UTC MAY 17,30.3
1800 UTC MAY 17,31.0
0000 UTC MAY 18,31.9
0600 UTC MAY 18,33.1
1200 UTC MAY 18,34.4
1800 UTC MAY 18,35.5
0000 UTC MAY 19,36.2
0600 UTC MAY 19,36.8
1200 UTC MAY 19,37.0
1800 UTC MAY 19,36.9
0000 UTC MAY 20,36.2
0600 UTC MAY 20,35.5
1200 UTC MAY 20,34.6
1800 UTC MAY 20,33.7
0000 UTC MAY 21,32.8

input.csvanother.txt문제 설명에서 복사했습니다 .

답변3

Bourne과 유사한 쉘에서 모든 버전의 echo, cat 및 Paste를 사용하십시오.

$ { echo ""; cat file2; } | paste -d '' file1 -
Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity
1800 UTC MAY 16,28.0
0000 UTC MAY 17,28.9
0600 UTC MAY 17,29.6
1200 UTC MAY 17,30.3
1800 UTC MAY 17,31.0
0000 UTC MAY 18,31.9
0600 UTC MAY 18,33.1
1200 UTC MAY 18,34.4
1800 UTC MAY 18,35.5
0000 UTC MAY 19,36.2
0600 UTC MAY 19,36.8
1200 UTC MAY 19,37.0
1800 UTC MAY 19,36.9
0000 UTC MAY 20,36.2
0600 UTC MAY 20,35.5
1200 UTC MAY 20,34.6
1800 UTC MAY 20,33.7
0000 UTC MAY 21,32.8

또는 모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.

$ awk 'NR==1{print} NR==FNR{a[NR-1]=$0; next} {print a[FNR] $0}' file1 file2
Timestamp,Latitude,Longitude,MinSeaLevelPressure,MaxIntensity
1800 UTC MAY 16,28.0
0000 UTC MAY 17,28.9
0600 UTC MAY 17,29.6
1200 UTC MAY 17,30.3
1800 UTC MAY 17,31.0
0000 UTC MAY 18,31.9
0600 UTC MAY 18,33.1
1200 UTC MAY 18,34.4
1800 UTC MAY 18,35.5
0000 UTC MAY 19,36.2
0600 UTC MAY 19,36.8
1200 UTC MAY 19,37.0
1800 UTC MAY 19,36.9
0000 UTC MAY 20,36.2
0600 UTC MAY 20,35.5
1200 UTC MAY 20,34.6
1800 UTC MAY 20,33.7
0000 UTC MAY 21,32.8

관련 정보