bash - 如何在awk中打​​印文件名?

标签 bash awk

我想打印文件名,然后在循环中打印 $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

最佳答案

能否请您尝试以下。你不需要为它使用 for 循环。

awk 'BEGIN{OFS="\t\t"} FNR==2{print FILENAME, $7}' r*  | column -t > out

如果你有 GNU awk,你可以使用 nextfile 来节省很多循环,并在条件满足时直接跳转到下一个文件,如:

awk 'BEGIN{OFS="\t\t"} FNR==2{print FILENAME, $7; nextfile}' r*  | column -t > out

\t\t 设置为 BEGIN 部分中输出集 OFS 的制表符分隔符。添加 | column -t 在输出中得到正确的 TAB 格式。

删除 BEGIN{OFS="\t\t"} 以防不需要,因为添加了 column 命令(OP 要求在输出中使用 TAB,所以这是为它添加)。

关于bash - 如何在awk中打​​印文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58369574/

相关文章:

bash 循环遍历文件路径列表 - 发送到 ffmpeg 时删除字符

linux - 我如何使用linux编写基本脚本?

bash - 如何使用 bash 脚本解压目录中的每种类型的 tar 文件?

如果我去 bash 然后 tcsh (anaconda),则 Python3 只在 tcsh 中打开

linux - awk 读取一行的条件,打印另一行的输出

unix - 如何在文件中搜索模式并在命令行上删除 Unix 中的行?

linux - 如何根据用户输入更新 case 语句中的变量

bash - `uniq` 没有对巨大的文本文件进行排序?

regex - 与 awk 一起使用的正则表达式中的量词表现出意外

bash - 如何获取第n个匹配的行号?