awk - 减去而不是FILENAME

use*_*277 1 unix awk

我试图将文件名添加到每行的末尾作为新字段.它的工作原理除了得到我得到的文件名-.

基础文件:

070323111|Hudson
Run Code Online (Sandbox Code Playgroud)

我想要的是:

070323111|Hudson|20150106.csv
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

070323111|Hudson|-
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

mv $1 $1.bak
cat $1.bak | awk '{print $0 "|" FILENAME}' > $1
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 5

-是没有这种信息时显示文件名的方法.既然你正在做cat $1.bak | awk ...,awk不是从文件读取而是从stdin读取.

相反,只需:

awk '...' file
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

awk '{print $0 "|" FILENAME}' $1.bak > $1
Run Code Online (Sandbox Code Playgroud)

来自man awk:

文件名

当前输入文件的名称.如果在命令行中未指定文件,则FILENAME的值为" - ".但是,在BEGIN规则中未定义FILENAME(除非由getline设置).