編集する

編集する

列数が異なり、行数が多い2つのファイルがあります。

bash-3.00$ cat fileA 
a1,a2,a3,a4,a5,a6,a7,a8,a9
q,w,,,,y,u,,
a,z,,,,q,n,,
.........................
z,p,,,,w,e,,

PS1:a1 - a9はコンマ(、)で区切られたヘッダーです。 PS2:ピリオド(.)は、2行の間に複数の行があることを示します。

bash-3.00$ cat fileB 
b1      b2
f       t
a       p
m       n
..........      
m       y
t       o

PS:b1 - b2はヘッダであり、スペースで区切られています。

fileAの列a2とa6を列b1とb2の内容に追加したいと思います。つまり、列a2は列b1に追加され、列a6は列b2に追加されます。

したがって、出力ファイルは次のようになります。

bash-3.00$ cat output 
a1,a2,a3,a4,a5,a6,a7,a8,a9
q,w,,,,y,u,,
a,z,,,,q,n,,
.........................       
z,p,,,,w,e,,
,f,,,,t,,,
,a,,,,p,,,
,m,,,,n,,,
.........................
,m,,,,y,,,
,t,,,,o,,,

単純なawkコマンドでこれをどのように実行できますか?

ベストアンサー1

必要なのは、i) file1 の内容を file2 に追加し、ii) file2 の形式をファイル 1 の形式と一致するように変更することです。これはあなたの質問が実際に求めるものではなく、結果に表示されるものです。私が誤解した場合は、質問を修正して明確に説明してください。

これを行うには、次のようにします。

awk 'NR>1{printf ",%s,,,,%s,,,\n",$1,$2}' file2 >> file1 

file1これにより出力ファイルが生成されます。これを維持するには、file1次の手順を実行します。

( cat file1; awk 'NR>1{printf ",%s,,,,%s,,,\n",$1,$2}' file2 ) > out

あるいは、すべてのことを行うこともできますawk(これはArchemarソリューションの単純化されたバージョンにすぎません)。

awk 'NR==FNR{print; next} FNR>1{printf ",%s,,,,%s,,,\n",$1,$2}' file1 file2 > out

おすすめ記事