如何使用AWK将文件名中的数字附加到csv的前面

时间:2019-03-04 22:11:33

标签: unix awk

我想使用awk命令将文件名中的所有数字附加到csv文件的开头。

此刻,我正在使用下面的代码将文件名仅附加到csv文件的开头,但是我想将字符串中的所有数字添加到文件名之前。

awk '{print "\"" FILENAME "\"," $0}' filename_1.csv >> filename_2.csv

有人可以帮我吗?

filename_1.csv文件的示例

name,id,color
fred,1,blue
james,2,green
tom,3,purple

预期输出:

1,filename_1.csv,name,id,color
1,filename_1.csv,fred,1,blue
1,filename_1.csv,james,2,green
1,filename_1.csv,tom,3,purple

预先感谢...

2 个答案:

答案 0 :(得分:0)

这里是一个:

$ awk 'FNR==1{                # first record
    match(FILENAME,/[0-9]+/)  # search for the first string of numbers 
}{                            # if found, print numbers, filename and record:
    print (RSTART?substr(FILENAME,RSTART,RLENGTH) ",":"") FILENAME "," $0
}' filename_1.csv 

输出:

1,filename_1.csv,name,id,color
1,filename_1.csv,fred,1,blue
1,filename_1.csv,james,2,green
1,filename_1.csv,tom,3,purple

如果文件名中没有数字,请不要打印它们,例如文件foo的输出:

foo,name,id,color
foo,fred,1,blue

答案 1 :(得分:0)

$ awk 'BEGIN {FS=OFS=","} FNR==1 {fn=FILENAME; split(fn, a, /[_.]/); n = a[2]} { print n, fn, $0 }' filename_1.csv 
1,filename_1.csv,name,id,color
1,filename_1.csv,fred,1,blue
1,filename_1.csv,james,2,green
1,filename_1.csv,tom,3,purple