从文件列表中提取标头以及文件名

从文件列表中提取标头以及文件名

我试图编写一个 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来格式化输出:basenamehead

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")

相关内容