web-dev-qa-db-ja.com

複数のファイルから.csvに列を追加する

複数のファイルからcsvファイルに列を追加しようとしています。これは私がこれまでに試したものですが、最終的には空のファイルまたは最後のファイルの列のみのいずれかになってしまいます。

    while read i; do
        awk '{print $4}' ${i}.txt > ${i}_temp
        awk 'NR==FNR{a[NR]=$0;next}{print a[FNR],$0}' OFS=, test.csv ${i}_temp >> test.csv
    done < file_list

ファイルリストは、アクセッション番号の単なるリストです。

NA123
NA124
NA125
...

それらが対応するテキストファイルには4つの列があり、最後の列をコピーしてcsvファイルの次の列として追加します。ファイルの内容は次のようになります。

NA123.txt:
April-18    10:00    18:00    8
April-19    09:00    19:00    10
April-20    11:00    16:00    5
...
NA124.txt:
April-18    14:00    18:00    4
April-19    09:00    15:00    6
April-20    07:00    16:00    9
...
NA125.txt:
April-18    10:00    22:00    12
April-19    09:00    12:00    3
April-20    06:00    16:00    10
...
test.csv:
0,
1,
2,
...

出力を次のようにします:

0,8,4,12
1,10,6,3
2,5,9,10
...

これについて何を変更する必要がありますか、これを行うより効率的な方法はありますか?

4
thebriterican

多分あなたはペーストと1つの追加の一時ファイルを使用しようとすることができます

touch temp

while read i; do
        awk '{print $4}' ${i}.txt > ${i}_temp
        paste temp ${i}_temp > test.csv
        cp test.csv temp
done < file_list

rm temp
1
user352003

なぜpasteを使用しないのですか?

$ cat in1; cat in2
row1,col2,col3
row2,col2,col3
row3,col2,col3
row4,col2,col3
row1
row2
row3
row4
$ paste -d, in1 in2
row1,col2,col3,row1
row2,col2,col3,row2
row3,col2,col3,row3
row4,col2,col3,row4
1
DopeGhoti