我想在脚本中添加此awk命令,但始终出现错误。 我已放入"",但仍然出现错误。

system("awk -F"\t" '{ for ( i=1; i<=2; i++ ) { printf"%s\t", $i } printf"

"; }' myfile file2"};

错误是

String found where operator expected

at host_parse line 21, near"t" '{ for

( i=1; i<=2; i++ ) { printf""

Unquoted string"a" may clash with

future reserved word at myfile line

58.

Unquoted string"a" may clash with

future reserved word at myfile line

58.

syntax error at myfile line 21, near

"" awk -F"\"

谢谢。

您到底为什么要混合Awk和Perl? 它们具有相同的目的,因此,如果您有一个,则不需要另一个。

因为有时候正确的工具就是您已经知道如何使用的工具。

Yoy可以尝试使用此有用的工具将awk脚本转换为perl:a2p perldoc.perl.org/a2p.html

我不仅要对@larsmans进行评论,还想将其加粗,斜体并以H1样式显示!

@Axeman:不要忘记红色和闪烁。

@丹尼斯·威廉姆森::D

关于使用system命令的最棘手的部分之一是使用引号,该引号可以将正确的命令传递给操作系统。 Perl的q//构造对此非常有帮助:

# treat everything between the @...@ as uninterpolated string

system( q@awk -F"\t" '{ for ( i=1; i<=2; i++ ) { printf"%s\t", $i }

printf"

"; }' myfile file2@ );

将数组传递给系统甚至更好。 报价问题消失了。

为了回答您的紧迫问题,您需要跳过Perl system运算符的默认行为。通常,shell解析命令非常方便,但是如您所见,有时候,进行多级编码是很痛苦的,甚至是一个安全漏洞。

您可以使用system LIST和exec LIST形式完全忽略外壳程序的引用。根据您的情况,将代码更改为

#! /usr/bin/env perl

use strict;

use warnings;

my @cmd = (

"awk",

"-F","\t",

'{ for ( i=1; i<=2; i++ ) {

printf"%s\t", $i

}

printf"

";

}',

"myfile","file2",

);

system(@cmd) == 0 or warn"$0: awk exited" . ($? >> 8);

您不必使用临时数组,但我不喜欢带有多行命令和成功检查结果的代码。

给定myfile包含

1  2   3   4

foo bar baz

oui oui monsieur

和file2与

a   b   c

d   e   f   g

(两种情况下的分隔符均为TAB字符),则输出为

1  2

foo bar

oui oui

a   b

d   e

它们是不可见的,但是上面输出的每一行都有一个尾随的TAB。

在Perl中执行相同的操作非常简单。例如,

sub print_first_two_columns {

foreach my $path (@_) {

open my $fh,"

while () {

chomp;

my(@cols) = (split /\t/)[0 .. 1];

print join("\t", @cols),"

";

}

close $fh;

}

}

可能不明显的部分是从split返回的值的一部分,但是发生的事情在概念上很简单。切片使您可以在多个索引处获取数据(在这种情况下为0和1,即第一和第二列)。范围运算符表达式0 .. 1的结果为列表0和1。如果稍后决定要使用前四列,则将其更改为0 .. 3。

调用上面的子

print_first_two_columns"myfile","file2";

请注意,代码并不完全等效:它不会保留结尾的TAB字符。

在命令行中,它甚至更简单:

$ perl -lane '$,="\t"; print @F[0,1]' myfile file2

1   2

foo bar

oui oui

a   b

d   e

您不需要外壳程序来解释任何重定向(或其他外壳程序设施),因此最好将参数列表传递给system()

system 'awk', '-F',"\t",

'{for (i=1; i<=2; i++) {printf"%s\t", $i}; print""}',

'myfile', 'file2';

如何在linux编写perl脚本,关于linux:如何在perl脚本中插入awk命令?相关推荐

  1. linux编写运行shell程序,Linux的Shell编程运行Shell程序的方法有哪些呢?

    用户可以用任何编辑程序来编写Shell程序.因为Shell程序是解释执行的,所以不需要编译成目的程序.按照Shell编程的惯例,以 bash为例,程序的第一行一般为"#!/bin/bash& ...

  2. linux中awk命令_Linux / Unix中的AWK命令

    linux中awk命令 AWK is suitable for pattern search and processing. The script runs to search one or more ...

  3. linux查询日志命令加过滤,Linux记录-筛选日志sed、find、tail,du,awk命令

    1.查看某一段时间的日志 #cat hdfs-audit.log | sed -n '/2018-04-11 10:00:00/,/2018-04-11 10:01:00/ p' | more   - ...

  4. linux编写日志接口so,linux下动态链接问题(.so文件的编写与调用) .

    .o 就相当于windows里的obj文件 .a 是好多个.o合在一起,用于静态连接 .so 是shared object,用于动态连接的,和dll差不多 sotest.c #include int ...

  5. linux 编写完程序吗,linux下编写C++程序

    注:本文写的内容全部在ubuntu12.04下完成. 要在linux下写C++程序,要懂的一点编译的知识.下面介绍一下. 源代码->预处理器(负责将代码补充)->汇编程序(生成汇编语言)- ...

  6. linux编写路由器固件,基于linux系统的无线路由器固件组成

    我们看到的很多固件,都是运行的linux系统,比如基于broadcom芯片的无线路由器.其固件分为三个部分:cfe.kernel.nvram.. t% J- V; \) }- B( q& U# ...

  7. linux编写周期性计划任务,linux任务计划及周期性任务计划

    相关命令:at.batch.cron.mailx 未来某时间执行一次任务:at, batch 周期性运行某任务: cron 邮件相关命令: mailx mailx - send and receive ...

  8. 面向dba的linux shell 脚本简介,面向dba的linuxshell脚本简介.doc

    面向dba的linuxshell脚本简介.doc 面向DBA的LinuxShell脚本简介7年前,Oracle发布了Linux上的第一个商业数据库.从那时起,Oracle.RedHat和Novell/ ...

  9. linux定时任务打印日志,Centos7(linux)使用crond服务定时执行js脚本并将脚本的输出内容记录日志文件的简单应用...

    - ## 在Centos7.8上使用crond服务定时执行js脚本并将脚本执行的输出记录日志 1. 安装wget 2. wget https://npm.taobao.org/mirrors/node ...

最新文章

  1. 5G元年的世界电信日,我们的生活将如何被改变?
  2. 微信小程序 - vant popup弹出层阻止底层页面滑动
  3. PHP 之旅 基础语法(二)
  4. 《R语言实战》第7章
  5. 为什么AI感知与人类感知很难直接比较?
  6. 可能是目前最详细的Redis内存模型及应用解读
  7. mysql 中有什么命令_常用mysql命令大全
  8. PHP无法使用file_get_contents或者curl_init()函数解决办法
  9. Sublime Text 教程
  10. golang RWMutex读写互斥锁源码分析
  11. 经纬财富:莆田炒现货白银技巧
  12. 关于AlertDialog的小坑
  13. SpringCloud整合Sa-Token登录认证+Gateway网关拦截
  14. oracle游标简介
  15. android os v2.0,免除升级烦恼 Android OS v2.2给力手机推荐
  16. Preface---ITE EC
  17. [极客大挑战 2019]Secret File
  18. mysql datetime详解,MySQL datetime类型详解
  19. 永磁同步电机系统控制
  20. 关于setData 的报错

热门文章

  1. 图像处理——相位恢复(GS,TIE,改进型角谱迭代法)(已更新代码)
  2. solaris配置php,Solaris 9.0下安装配置Apache-2.0.45+php-4.3.1+mysql-4.1.0
  3. 测试测量(2)-继电器基础介绍
  4. ANSYS中关于质量矩阵 刚度矩阵的提取【1】
  5. TP5.1 支付宝app支付 (沙箱本地测试)
  6. 2015年3月美国桌面搜索份额:Bing首超20%,谷歌、雅虎均下跌
  7. Kaggle新赛:Lyft 自动驾驶运动预测,发布迄今最大预测任务数据集
  8. C#的多线程机制初探 (引自 http://www.daima.com.cn/info/234.htm ,在此感谢原作者)
  9. 新框架(BSF_JAVA)环境部署个人总结
  10. 创客学院知识巩固-04网络