我想在循环中打印文件名,然后打印$ 7的值。请问出什么事了?与'"i"'
for i in r*; do
awk 'FNR == 2 {print '"i"', $7}' r* > out
done
建议后输出
fdfadfasdfa 0.00775 0.00644 6298
dsafdsfsaf 0.00705 0.00574 14173
dasfdsafdafd 0.00716 0.00597 22948
dafadsafdafsdf 0.00859 0.00679 5210
dafadsfsa 0.00705 0.00576 11098
答案 0 :(得分:3)
能否请您尝试以下。您无需为此使用main
循环。
for
如果您有GNU awk 'BEGIN{OFS="\t\t"} FNR==2{print FILENAME, $7}' r* | column -t > out
,则可以使用awk
保存多个周期,并在条件满足时直接跳转到下一个文件,例如:
nextfile
要将awk 'BEGIN{OFS="\t\t"} FNR==2{print FILENAME, $7; nextfile}' r* | column -t > out
设置为\t\t
部分中输出集OFS
的制表符分隔符。在输出中添加BEGIN
,以获得正确的TAB格式。
如果由于添加了| column -t
命令而不需要BEGIN{OFS="\t\t"}
,则删除column
(OP在输出中要求TAB,因此已添加了它)。
答案 1 :(得分:2)
由于您要依靠bash来提供$i
,因此需要添加一个美元符号。同样,单引号和双引号也应互换。 Awk需要看到双引号,因此它们必须位于单引号之内。
for i in r*; do
awk 'FNR == 2 {print "'$i'", $7}' r* > out
done
请注意,如果$i
可能包含特殊字符,这是不安全的。最好不要在awk脚本中直接扩展bash变量。您会遇到引用问题,空格问题;这是一个定时炸弹。
最好使用-v
将bash变量传递给awk。它更安全,并且避免了引导时引号和转义的问题。您只需编写i
,就这么简单。
for i in r*; do
awk -v i="$i" 'FNR == 2 {print i, $7}' r* > out
done