나는 주어진 디렉토리에 있는 파일 목록에서 헤더와 파일 이름을 추출할 수 있는 쉘 스크립트를 작성하려고 합니다.
예를 들어 ABC_TESTFILE1.csv
다음과 같은 제목을 포함합니다 .
C1,C2,C3
ABC_TESTFILE2.csv
이런 제목이 들어있어요
C1,C4,C5
출력 텍스트 파일을 다음과 같이 만들고 싶습니다.
ABC_TESTFILE1,C1,C2,C3
ABC_TESTFILE2,C1,C4,C5
나는 다음과 같이 행운을 시험하고 있습니다.
#!/bin/bash
# Go to where the files are located
filedir=/home/vikrant_singh_rana/AAA_USP/Combined-Files/*
for filepath in $filedir
do
#echo "Processing $filename"
# do something on $f
var_head=$(head -n 1 basename "$filepath" )
echo "$var_head"
done; > test.txt
답변1
AWK 사용:
awk 'NR==1 {print FILENAME "," $0}' *.csv
.csv
확장자가 최소한 한 줄을 포함하는 모든 파일을 나열합니다. 여기서 첫 번째 줄은 첫 번째 줄입니다.
답변2
printf
및 를 사용하여 출력 형식을 지정할 수 있습니다 .basename
head
for file in /home/vikrant_singh_rana/AAA_USP/Combined-Files/*.csv; do
printf '%s,%s\n' "$(basename "$file" ".csv")" "$(head -n1 "$file")"
done >test.txt
답변3
path=(`ls -d /tmp/*.csv`)
for file in "${path[@]}"; do
head_line=`head -n1 $file`
file_no_extension=`basename $file | sed 's/\..*//'`
echo "$file_no_extension""$head_line"
done
경로가 배열인지 확인하세요.
[root@mole tmp]# set | grep ^path=
path=([0]="/tmp/ABC_TESTFILE1.csv" [1]="/tmp/ABC_TESTFILE2.csv")