我试图编写一个 shell 脚本,其中我可以从给定目录中的文件列表中提取标头和文件名。
例如: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")