将多个文件中的列添加到 .csv

将多个文件中的列添加到 .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
...

我需要对此进行哪些更改,或者是否有更有效的方法来做到这一点?

答案1

尝试:

 <file_list xargs -I % awk '
     { system("sed -i '\'' " NR "s/,\\?$/," $4 "/'\'' test.csv" ) }' %.txt

正在xargs从 file_list 文件读取文件名,并将其提供给以文件名包含的后缀awk调用的 Xarags 变量%.txt

withsed '#s/$/something/' test.csv"命令用于附加到文件中特定行号的something末尾,例如;所以在上面,是需要附加到特定行号的字符串,取自;是说你的行可能以我使用的逗号结尾,因为你的.该命令由'调用$#test.csv$4NR,\?$,test.csvsedawksystem()功能

笔记sed就地写入任何更改,因此您不会注意到终端输出,请执行以下操作:

$ cat test.csv
0,8,4,12
1,10,6,3
2,5,9,10

答案2

也许您可以尝试使用粘贴和一个额外的临时文件

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

答案3

为什么不直接使用呢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

相关内容