我有几个文本文件,每个文件的内容就像
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 ..