对具有相同扩展名的文件集应用 AWK

发布于 2024-07-14 13:04:01 字数 345 浏览 6 评论 0原文

我想对扩展名为“*.txt”的文件应用以下“awk”命令

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

但是为什么这个命令不起作用:

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

通常情况下,

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' file1.txt

会起作用。

I want to apply the following "awk" command on files with extension "*.txt"

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

But why this command doesn't work:

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

Normally,

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' file1.txt

would work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

戏舞 2024-07-21 13:04:01

一旦你删除了 echo 它应该可以工作:

for i in *.txt do awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

如果有任何文本文件中包含空格,它就会失败,你可以尝试这个:

find . -name '*.txt' -print0 | xargs --null -n 1 awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

打印名称的替代方法:(

find . -name '*.txt' -print -exec awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' {} \;

基本上使 find 直接执行 awk,所以也打印输出文件名。

Once you've removed the echo it should work:

for i in *.txt do awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

It'll fail if there are any text files with spaces in them, you could try this:

find . -name '*.txt' -print0 | xargs --null -n 1 awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

An alternative for printing out names:

find . -name '*.txt' -print -exec awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' {} \;

(Basically make find execute awk directly, so and also print out the file names.

离旧人 2024-07-21 13:04:01
for i in *.txt; do echo "$i"; awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' "$i"; done

这将打印已处理文件的名称以及 awk 命令的输出。

for i in *.txt; do echo "$i"; awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' "$i"; done

This will print the names of the processed files together with the output of the awk command.

寄居者 2024-07-21 13:04:01

试试这个(在 Solaris 上使用 nawk/usr/xpg4/bin/awk):

awk 'END {
  printf "%s: %.2f\n", fn, sum
  }
FNR == 1 {
  if (fn) printf "%s: %.2f\n", fn, sum
  fn = FILENAME
  sum = 0
  }
$4 ~ /NM/ { 
  sum += $2 
  }' *.txt 

Try this (use nawk or /usr/xpg4/bin/awk on Solaris):

awk 'END {
  printf "%s: %.2f\n", fn, sum
  }
FNR == 1 {
  if (fn) printf "%s: %.2f\n", fn, sum
  fn = FILENAME
  sum = 0
  }
$4 ~ /NM/ { 
  sum += $2 
  }' *.txt 
灯角 2024-07-21 13:04:01

您需要添加一个“;” :

for i in *.txt; do ...

代替

for i in *.txt do ...

You need to add a ';' :

for i in *.txt; do ...

instead of

for i in *.txt do ...
只是我以为 2024-07-21 13:04:01

不需要回显。

尝试

在 *.txt 中查找 i; 做; awk '$4 ~ /NM/{ sum += $2 } END{ 打印总和 }' $i; 完成

for i in *.txt; do awk '$4 ~ /NM/{ sum += $2 } END{ 打印 sum }' $i; 完成

应该有效

echo is not required.

try

for i in *.txt; do; awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

or

for i in *.txt; do awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

should work

染柒℉ 2024-07-21 13:04:01

不知道是复制粘贴还是打错了。

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; 完成

更正回显后,上面的命令将回显您的 awk 脚本和文件名,但不运行它。

Not sure if you've copy pasted or it's a typo.

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

With echo corrected, the command above will echo your awk script and the filename, but not run it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文