입력 파일:
"Run Date/Time: 2022-02-09 12:47",,,GOOD_MORNING_WORLD
"File Processed: AB-FILE2.20220209.110516",,,GOOD_MORNING_WORLD
AB1234,5," PQR2",GOOD_MORNING_WORLD
AB-345,10," PQR2",GOOD_MORNING_WORLD
XY890,20," PQR2",GOOD_MORNING_WORLD
예상 출력 파일:
Codes Produced, Count, PQR, Run Date, Run Time, File Processed
AB1234,5,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
AB-345,10,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
XY890,20,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
위의 출력 형식을 구현하도록 도와주세요.
아래 명령을 시도했지만 열과 값을 제공합니다. 각 행에서 열 헤더를 제거해야 합니다.
awk -F, 'NR==1 {FN = $1; next} NR==2 {DT = $1; next} {print $1,$2,$3,FN,DT,$4}' OFS=, InputFile.csv > InputFile_Int.csv
AB1234,5," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
AB-345,10," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
XY890,20," PQR2","Run Date/Time: 2022-02-09,12:47",File Processed: AB-FILE2.20220209.110516,GOOD_MORNING_WORLD
미리 감사드립니다.
답변1
두지 마십시오 FS=
.OFS=
뒤쪽에사람들이 스크립트를 읽을 때 기본 FS 및/또는 OFS 값이 있다고 가정하고 실제로 변경했다는 사실만 확인하기 때문에 코드를 읽기 어렵게 만들기 때문입니다. 대신 do awk -Fx -v OFS=y 'script' file
또는 awk 'BEGIN{FS="x";OFS="y"} script' file
not 과 같이 둘 다 미리 설정하세요 awk -Fx 'script' OFS=y file
. 이 규칙의 유일한 예외는 서로 다른 입력 파일에 대해 서로 다른 값으로 설정한 다음 입력 파일 이름 사이에 이러한 값 중 하나 또는 둘 다를 설정해야 하는 경우입니다.
또한 사용자 정의 변수에 모두 대문자 변수 이름을 사용하지 마십시오. 이렇게 하면 코드가 혼란스러워지고 실제로는 사용하지 않는 내장 변수 이름을 사용하는 것처럼 보이게 되어 충돌이 발생할 수 있습니다. 정의되어 있다고 생각하지만 실제로는 내장 변수 이름에 의해 깨지거나 깨지는 변수 이름입니다.
$ cat tst.awk
BEGIN {
FS = "[\"[:space:]]*,[\"[:space:]]*"
OFS = ","
}
NR < 3 {
split($1,parts," ")
if ( NR == 1 ) {
date = parts[3]
time = parts[4]
}
else {
file = parts[3]
print "Codes Produced"," Count"," PQR"," Run Date"," Run Time"," File Processed"
}
next
}
{ print $1, $2, "\"" $3 "\"", date, time, file }
$ awk -f tst.awk InputFile.csv
Codes Produced, Count, PQR, Run Date, Run Time, File Processed
AB1234,5,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
AB-345,10,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
XY890,20,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
답변2
노력하다
awk -F"[ ,]*" '
{gsub(/"/,"")
}
NR==1 {print "Codes Produced, Count, PQR, Run Date, Run Time, File Processed"
DT = $3
TM = $4
next
}
NR==2 {FN = $3
next
}
{print $1,$2,"\"" $3 "\"",DT,TM,FN
}
' OFS=, file
Codes Produced, Count, PQR, Run Date, Run Time, File Processed
AB1234,5,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
AB-345,10,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516
XY890,20,"PQR2",2022-02-09,12:47,AB-FILE2.20220209.110516