我有一个文件,每行有4个字段。如果字段数量较少,那么我想在带有行号的日志文件中写入该信息。
Filed1line1| Filed2line1| Filed3line1| Filed4line1
Filed1line2| Filed2line2|
Filed1line3| Filed2line3| Filed3line3| Filed4line3
类似于 - 行号2有3个字段用于文件a.txt
我们可以使用awk实现这一目标。
其实我使用的是以下代码段。如果字段数是<> 4然后我在一个坏文件中写它。这很好用。但我无法在日志中写入NR值。
awk -F'|' -v DGFNM="$IN_DIR$DGFNAME" -v DBFNM="$IN_DIR$DBFNAME" '
$1 == "DTL" {
if (NF == 4) {
print substr($0, 5) > DGFNM
} else {
print > DBFNM
print NR >> $logfile
}
}
' "$IN_DIR$IN_FILE"
答案 0 :(得分:1)
简单:NF是记录中的字段数,NR是记录号。
类似于:awk '{ if (NF < 4) { print "Row " NR " has " NF " fields"; } }'
- 有更短的方式,但我更喜欢更长的代码,更容易阅读; - )
有关打印到不同输出文件的一些信息,请参阅此问题:is it possible to print different lines to different output files using awk
要回答您编辑的问题:$logfile
在单引号内,因此它不会扩展到您的shell变量日志文件。它不是一个&#34; awk&#34;变量。在awk中尝试print NR >> "some_file";
,然后稍后将some_file重命名为$ logfile。
另一种选择是使用扩展的$ logfile生成awk文件,而不是尝试内联。