複数のテキストファイルの列をコピーし、新しいファイルの最初の行にファイル名を追加してデータセットを構成したいと思います。私のデータの例は次のとおりです。
ファイル1
a a b b
1 2 3 4
ファイル2
c d e f
g h i g
。 。 。
ファイル3
11 12 23 12
2 4 6 7
フェロン
n1 n2 n3 n4
nn nm no np
私が望む出力は、データファイルからその列を収集して4つのデータファイルを生成することです。
出力1
file1 file2 file3 filen
a c 11 n1
1 g 2 nn
出力2
file1 file2 file3 filen
a d 12 n2
2 h 4 nm
出力3
file1 file2 file3 filen
b e 23 n3
3 i 6 no
出力4
file1 file2 file3 filen
b f 12 n4
4 g 7 np
以下を使用して、4つの必須ファイルをコピーして整理することができました。
awk 'FNR==1{f++}{a[f,FNR]=$1}END{for(x=1;x<=FNR;x++){for(y=1;y<ARGC;y++)printf("%s ",a[y,x]);print ""}}' file* > output1
awk 'FNR==1{f++}{a[f,FNR]=$2}END{for(x=1;x<=FNR;x++){for(y=1;y<ARGC;y++)printf("%s ",a[y,x]);print ""}}' file* > output2
awk 'FNR==1{f++}{a[f,FNR]=$3}END{for(x=1;x<=FNR;x++){for(y=1;y<ARGC;y++)printf("%s ",a[y,x]);print ""}}' file* > output3
awk 'FNR==1{f++}{a[f,FNR]=$4}END{for(x=1;x<=FNR;x++){for(y=1;y<ARGC;y++)printf("%s ",a[y,x]);print ""}}' file* > output4
ただし、出力ファイルの最初の行にファイル名を追加することはできません。
どんな助けでも大変感謝します。
ベストアンサー1
すでに出力ファイルがあり、各ファイルにファイル名を含むヘッダーを追加する必要がある場合は、次のようにします。
header=$(printf "%s %s %s %s\n" $(awk 'FNR==1{print FILENAME}' file*))
for file in output*; do
printf '%s\n%s\n' "$header" "$(cat $file)" > tmp &&
mv tmp "$file";
done