我需要将标题(单行)添加到大量(> 10k)的文本文件中.假设变量$ HEADER确实包含适当的头.命令
find -type f -name 'tdgen_2012_??_??_????.csv' | xargs sed -i "1s/^/$HEADER\n/"
Run Code Online (Sandbox Code Playgroud)
确实运作良好.我面临的问题是一些数据文件(tdgen_2012_ ?? ?? ????.csv)是空的.sed(1)不能解决文件的非存在行.我决定以不同的方式管理空文件:
echo $HEADER | tee $(find -type f -name 'tdgen_2012_??_??_????.csv' -empty) > /dev/null
Run Code Online (Sandbox Code Playgroud)
由于空文件的数量,上面的命令不起作用.tee(1)无法写入无限数量的文件.还可以超过命令行参数的数量.
由于性能低,我不想使用for-cycle(tee(1)可以一次写入多个文件).
我的问题:
echo $HEADER > header
find -type f -name 'tdgen_2012_??_??_????.csv' \
-exec sh -c '{ echo $HEADER; cat {}; } > tmp && mv tmp {}' \; -print
Run Code Online (Sandbox Code Playgroud)
说明:
1. -exec sh -c "..." - 能够调用多个命令
2. { echo $HEADER; cat {}; } > tmp && mv tmp {} - 连接$HEADER并找到找到的文件tmp并重命名tmp为找到的文件.只是因为你做不到cat header {} > {}
3. -print - 显示每个更改文件的文件名
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |