我有一个循环来处理dir中的一堆文件。我想将文件名输入到它处理的文件中,但我收到了错误。它与myvar
语法完美配合,但出于显而易见的原因我需要它。
awk: cmd. line:1: RS=
awk: cmd. line:1: ^ unexpected newline or end of string
for filename in $files
do
awk -v "myvar=${filename}"
RS= '/-- Ticket/{++i; print "PROMPT myvar Line ",
i ORS $0 ORS; i+=split($0, a, /\n/)+1}' ${filename}.txt
done
答案 0 :(得分:1)
这里有几个问题,对于您尝试传递给-v
的每个变量都使用awk
语法,
awk -v myvar="${filename}" -v RS= '/-- Ticket/{++i; print "PROMPT " myvar " Line ", i ORS $0 ORS; i+=split($0, a, /\n/)+1}' ${filename}.txt
# ^^^ variable1 ^^^^^ variable2 --> using separate -v for each
应该是正确的方法。
对于awk
的shell变量导入,请按照上面的示例执行操作,而不是"myvar=${filename}"
,而只是myvar="${filename}"
答案 1 :(得分:0)
如果你可以避免批处理循环,它会更好(主要用于子shell分叉,......)
# assume TXT_files is the list of $files with .txt extension (not purpose of this OP)
awk RS='' '
/-- Ticket/{
# get the file name without extension
myvar = FILENAME;sub( /\.txt$/,"",myvar)
print "PROMPT " myvar " Line " ++i ORS $0 ORS
i += split( $0, a, /\n/) + 1
}
' ${TXT_files}