我对此非常陌生并尝试遍历大约19000个文件(所有在一个目录中),以便在每个文件的每一行的开头插入相应的文件名。
我稍后会连接这些文件以获取包含我分析所需的所有数据的文件。
文件名显示以下模式:
V_foo_V_bar
每个文件名中的两个V_
部分是不变的。其余的各不相同。
我试过了:
for f in V*; do awk '{print "$f" $} file
我在$f
左右括号和没有括号的情况下这样做了,两者都没有用。
使用括号将字符串$f
插入文件名
如果没有删除,就不会插入任何内容
非常感谢帮助,因为我已经尝试了其他一些同样徒劳的想法,我的挫败感敲开了我的门
非常感谢。
答案 0 :(得分:10)
要在每个文件的每一行的开头插入文件名,请尝试以下操作:
awk '{print FILENAME, $0}' V*
FILENAME
是一个内置变量,带有文件名。
V*
将全局覆盖目录中的所有文件。
如果您希望在名称和行之间放置分隔符,则可以执行以下操作:
awk '{print FILENAME " : " $0}' V*
答案 1 :(得分:2)
尝试:
for f in V*; do sed -i "s/^/$f\t/" "$f"; done
这假设没有文件名具有诸如*
之类的尴尬字符。不过,空间应该没问题。
答案 2 :(得分:0)
感谢Jaypal,它解决了我遇到的类似问题。我修改了你的答案,添加文件名并连接文件
awk '{print FILENAME " : " $0}' V* >> all.csv