다음과 같은 파일 이름을 가진 테스트 폴더가 있습니다.
100080_Accounting Statistic-42005_04May2020_0000-04May2020_0100.csv
110001_ABCD Traffic_04May2020_header_only.csv
cat '110001_ABCD Traffic_04May2020_header_only.csv'
ID,NAME,LOCATION
1,Vikrant,Gurgaon
2,Bharat,Noida
3,Raju,Hyderabad
cat '100080_Accounting Statistic-42005_04May2020_0000-04May2020_0100.csv'
ID,NAME,AGE,DEPARTMENT
4,Raju,22,Admin
5,Rajeev,23,Admin
테스트 디렉터리에서 특정 파일을 읽는 동안 파일 이름을 추출하고 파일의 각 레코드에 해당 파일 이름을 추가하려고 합니다. 새로 생성된 파일에 실제 레코드를 쓰기 전에 헤더에 새 열 이름 "GroupName"을 추가했으며 이 파일을 다른 디렉터리에 쓰고 싶습니다.
아래는 논리가 예상대로 잘 작동하는 쉘 스크립트이지만 동일한 파일 이름을 가진 다른 디렉토리에 쓰는 방법을 찾을 수 없습니다. 또한 두 번째 파일의 헤더에 열을 추가하는 데 문제가 있습니다.
#!/bin/bash
# Go to where the files are located
filedir=/home/vikrant_singh_rana/testing/*
#reading file from directory
for filename in $filedir; do
#extracting modified file name from file
b=$(basename "$filename" ".csv" | awk -F "_" '{print $2}' | awk -F "-" '{print $1}')
#reading line by line from file
first='yes'
while read -r line;do
#reading header from file
header=$(head -n1 "$filename")
if [[ $first == 'yes' ]]; then
#writing header with new column just once
printf '%s,%s\n' "GroupName" "$header"
first='no'
else
#writing modified filename to each record of a file
printf '%s,%s\n' "$b" "$line"
fi
done <"$filename"
#echo $filename
output_filename=$(basename "$filename")
#echo $output_filename
#done
done > /home/vikrant_singh_rana/enrichment_files/enrichment_file.txt
내가 얻는 결과는 다음과 같습니다.
cat /home/vikrant_singh_rana/enrichment_files/enrichment_file.txt
GroupName,ID,NAME,AGE,DEPARTMENT
Accounting Statistic,4,Raju,22,Admin
Accounting Statistic,5,Rajeev,23,Admin
GroupName,ID,NAME,LOCATION
ABCD Traffic,1,Vikrant,Gurgaon
ABCD Traffic,2,Bharat,Noida
ABCD Traffic,3,Raju,Hyderabad
내가 기대하는 것은 다음과 같습니다. 파일 이름은 내가 읽고 있는 이름과 동일하며 출력은 별도의 파일에 기록되어야 합니다.
file name as :110001_ABCD Traffic_04May2020_header_only.csv
GroupName,ID,NAME,AGE,DEPARTMENT
Accounting Statistic,4,Raju,22,Admin
Accounting Statistic,5,Rajeev,23,Admin
file name as :100080_Accounting Statistic-42005_04May2020_0000-04May2020_0100.csv
GroupName,ID,NAME,LOCATION
ABCD Traffic,1,Vikrant,Gurgaon
ABCD Traffic,2,Bharat,Noida
ABCD Traffic,3,Raju,Hyderabad
답변1
출력을 파일에 쓸 수 있었고 다음과 같이 변경했습니다. 변경 사항이 필요한 경우 수정해 주십시오.
#!/bin/bash
# Go to where the files are located
filedir=/home/vikrant_singh_rana/testing/*
#reading file from directory
for filename in $filedir; do
#extracting modified file name from file
b=$(basename "$filename" ".csv" | awk -F "_" '{print $2}' | awk -F "-" '{print $1}')
#reading line by line from file
first='yes'
output_filename=$(basename "$filename")
while read -r line;do
#reading header from file
header=$(head -n1 "$filename")
if [[ $first == 'yes' ]]; then
#writing header with new column just once
printf '%s,%s\n' "CounterGroupName" "$header" > /home/vikrant_singh_rana/enrichment_files/"$output_filename"
first='no'
else
#writing modified filename to each record of a file
printf '%s,%s\n' "$b" "$line" >> /home/vikrant_singh_rana/enrichment_files/"$output_filename"
fi
done <"$filename"
done