複数のファイルの列を.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ファイルから読み取られ、filenameに含まれるサフィックスを使用してawk呼び出されるXarags変数に提供されます%.txt

withsed '#s/$/something/' test.csv"コマンドは、ファイルの特定の行番号の末尾に追加するために使用されます。somethingたとえば、上記の場合、特定の行番号に追加する必要がある文字列は、次のものから取得されます。あなたの.Theコマンドが 'によって呼び出されたので、私が使用したコンマがあります。$#test.csv$4NR,\?$,test.csvsedawksystem()機能

ノートつまりsed、端末出力が表示されないように変更を記録するには、次の手順を実行します。

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

おすすめ記事