使用公共标头连接多个文件

使用公共标头连接多个文件

我有几个文本文件,每个文件的内容就像

attribute1,attribute2,...
1,2,...

描述列名称的第一行在所有文件中都是相同的。

我想连接文件的第二行,为它来自的文件的每一行添加一个带有文件名的新列,并将第一行之一作为新文件中的第一行。例如,所需的新文件如下所示:

file,attribute1,attribute2,...
file1,1,2,...
file2,11,12,...
file3,21,22,...

我该怎么做呢?

答案1

要添加文件名,请使用awk

awk -v OFS=, 'NR==1{print "file", $0};FNR==2{print FILENAME, $0}' file1 file2 ... fileN >outfile

如果它是输入的第一行 ( NR==1),则打印更新的标头;||如果它是每个文件的第二行 ( FNR==2),则打印更新的标头( )FILENAME和行 ( $0)。


编辑之前的初步答案。
你可以这样做sed

sed -n '1p;n;p' file1 file2 ... fileN >outfile

抑制-n打印,1p打印第一行,然后对于每一行(奇数行),它清空模式空间并读取n扩展行(即偶数行)并p打印它。

答案2

{   printf file,; head -n1 <file
    grep -n '' ./file* /dev/null|
    sed -ne'/^[^:]*:2:/s/:.:/,/p'
}   >./new_file

grep将在每行的开头获取您的文件名,并且还可以帮助按行号进行选择n。但是,如果您的文件名中有冒号,这可能不会很好地工作。

答案3

tail

cat file1.txt && tail -q -n +2 file2.txt file3.txt ..

相关内容