bash - 将文件名中的子字符串附加到 CSV 的每一行
问题描述
我有一个包含一些 .CSV 文件的文件夹:
/folder/
file1.csv
file2.csv
file3.csv
...
每个文件包含大约 500 行 CSV。我想连接这些文件,但将文件名中的数字附加到每个文件中每一行的末尾。
所以如果file1.csv
是:
0.00, 1.00, 0.54, 0.29
0.10, 1.00, 0.32, 0.92
0.31, 0.94, 0.22, 0.22
并且file2.csv
是:
0.50, 1.00, 0.84, 0.23
0.16, 0.40, 0.92, 0.94
0.34, 0.54, 0.62, 0.62
我希望我的最终输出是combined.csv
这样的:
0.00, 1.00, 0.54, 0.29, 1
0.10, 1.00, 0.32, 0.92, 1
0.31, 0.94, 0.22, 0.22, 1
0.50, 1.00, 0.84, 0.23, 2
0.16, 0.40, 0.92, 0.94, 2
0.34, 0.54, 0.62, 0.62, 2
file1.csv
请注意, in中的所有行都, 1
附加到每一行,并且 in file2.csv
,, 2
附加到每一行。如果文件名是fileN.csv
我想, N
附加到每一行。可以假设每个文件只有 1 个数字 ( 0-9
)。
我已经知道如何连接 .CSV 文件:cat *.csv > combined.csv
但是如何获取文件编号并将该编号附加到每一行?
解决方案
你会尝试以下方法:
cd folder
for f in file*.csv; do
num=${f//[^0-9]/} # extract number from the filename
sed "s/$/, $num/" "$f" # append the number to each line
done > combined.csv
组合.csv:
0.00, 1.00, 0.54, 0.29, 1
0.10, 1.00, 0.32, 0.92, 1
0.31, 0.94, 0.22, 0.22, 1
0.50, 1.00, 0.84, 0.23, 2
0.16, 0.40, 0.92, 0.94, 2
0.34, 0.54, 0.62, 0.62, 2
推荐阅读
- angular - 引导错误验证错误颜色(红色)未显示
- c++ - 隐式转换和运算符重载
- database - 如何登录 LBACSYS 用户?
- mysql - MySql - 加入 - 加入同一个表两次
- networking - HDLC 协议中的 REJECT 和 SELECTIVE REJECT 有什么区别?
- python - 根据另一个字符串向字符串添加符号
- javascript - jQuery Selector 将值设置为同名的特定文本输入字段
- javascript - javascript复制多个对象并按顺序增加索引
- mysql - 搜索方括号内的文本和语音标记 SQL
- angular - 角度材质工具栏 - 材质行为