繁体   English   中英

在bash中使用awk

[英]for and awk in bash

我在与awk结合使用bash中的for循环时遇到一些问题; 我正在Ubuntu 14.04中运行它。 这是我正在编写的脚本:

#!/bin/bash

L=99;

for j in 1 2 3
do

 awk -v J=$j '

  BEGIN {active=0}
  /Sweep 6/ {active=1}
  /Energy/ {
  a=substr($6,1,length($6)-1);
  if ((active) && (a==J)) {
   getline;
   getline;
   getline;
   print a+1, $5
  }
 }
'

done

在不输入我正在处理的文本文件的细节的情况下,脚本所做的只是运行j = 1而不是j = 1、2和3的循环中的问题。问题出在哪里?

提前致谢!

您的命令很好:

~$ cat >myfile
a
b
~$ for j in 1 2 3; do awk -v J=$j '{print J}' myfile; done
1
1
2
2
3
3

我看到的唯一一件事是awk应该解析的文件名。

我能看到的唯一不愉快的错误是您应该在每次循环运行时重新打开文件,对循环或整个脚本的stdin将不起作用。

如果文件很小并且无法倒带,则可以将其存储在bash变量中。

content="`cat`"
for j in 1 2 3
do
    echo "$content" |  awk 'etc...'
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM