【问题标题】:AWK how to print more than one information and redirect all to a text fileAWK如何打印多个信息并将所有信息重定向到文本文件
【发布时间】:2013-04-14 19:06:22
【问题描述】:

在这方面需要帮助 我正在创建一个脚本来分析文件并希望使用 Awk 在输出 txt 文件中打印 2 个信息 我能够打印没有人在我的屏幕上寻找的信息,但是如何使用相同的 Awk 打印另一个信息(例如我分析的文件的行数)并将这两个信息输出到文件 calle test.txt 我尝试使用此代码和代码错误:操作员预期

#!/usr/bin/perl

if ($#ARGV ==-1)
{
    print "Saisissez un nom de fichier a nalyser \n";
}
else
{
    $fname = $ARGV[0];
    open(FILE, $fname) || die ("cant open \n");
}
while($ligne=<FILE>)
{
    chop ($ligne);
    my ($elemnt1, $ellement2, $element3) = split (/ /, $ligne_);
}
system("awk '{print \$2 > "test.txt"}' $fname");

【问题讨论】:

  • 为什么不简单地用 Perl 做所有事情呢?调用awk 来打印文件的第二列似乎很愚蠢。 Perl 是 awk 的超集。甚至还有一个命令可以将 awk 脚本转换为 Perl,名为 a2p,它可能已经在您的系统上。

标签: perl awk


【解决方案1】:

尝试转义最后一行的引号,这样test.txt 实际上就在传递给system 的字符串中。

system("awk '{print \$2 > \"test.txt\"}' $fname");

编辑:将行数添加到同一文件中

Awk 变量NR 最终在END 规则执行时保存输入中的行数。试试这个:

$outfile = '"test.txt"';
system("awk '{print \$2 > $outfile} END {print NR > $outfile}' $fname");

注意事项:

  1. 注意 $outfile 的名称中没有任何有趣的字符。
  2. 与 shell 不同,两次都使用 &gt; 是完全安全的。 See here.

【讨论】:

  • ThanksNow 添加什么到这个打印命令行以便我可以打印总行数所以我希望这两个结果打印在同一个输出文件中 "awk '{print \$2 > \ "test.txt\"}' $fname"); "awk 'END {print NR > \"test.txt\"}' $fname")
  • ThanksNow 添加什么到这个打印命令行以便我可以打印总行数所以我希望这两个结果打印在同一个输出文件中 "awk '{print \$2 > \ "test.txt\"}' $fname"); "awk 'END {print NR > \"test.txt\"}' $fname")
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多