将文件名添加到制表符分隔文件中每行开头的循环(从而生成新列))

时间:2014-02-21 19:27:05

标签: linux bash sed awk

我对此非常陌生并尝试遍历大约19000个文件(所有在一个目录中),以便在每个文件的每一行的开头插入相应的文件名。

我稍后会连接这些文件以获取包含我分析所需的所有数据的文件。

文件名显示以下模式:

V_foo_V_bar 每个文件名中的两个V_部分是不变的。其余的各不相同。

我试过了:

for f in V*; do awk '{print "$f" $} file 

我在$f左右括号和没有括号的情况下这样做了,两者都没有用。

使用括号将字符串$f插入文件名 如果没有删除,就不会插入任何内容

非常感谢帮助,因为我已经尝试了其他一些同样徒劳的想法,我的挫败感敲开了我的门

非常感谢。

3 个答案:

答案 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