【求助】awk命令行输入多行问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
dtczhl
帖子: 70
注册时间: 2011-04-17 11:44

【求助】awk命令行输入多行问题

#1

帖子 dtczhl » 2012-01-25 16:37

我想输入命令:

代码: 全选

cat /etc/passwd | awk -F: ' \
NF != 7 { \
printf("line %d, does not have 7 fields: %s", NR, $0)} \
$1 !~ /[A-Za-z0-9]/{printf("line %d, nonalphanumeric user id:  %s\n", NR, $0)} '
但是每输完第3行回车后就会推出并且报错
结果见图~
1.jpg
如何才能正确输入命令?????
先谢了~~
头像
wjchen
帖子: 583
注册时间: 2011-05-02 19:08
系统: ubuntu 12.04

Re: 【求助】awk命令行输入多行问题

#2

帖子 wjchen » 2012-01-25 20:46

printf 不需要打括号

代码: 全选

cat /etc/passwd | awk -F: ' \
NF != 7 { \
printf "line %d, does not have 7 fields: %s", NR, $0} \
$1 !~ /[A-Za-z0-9]/{printf "line %d, nonalphanumeric user id:  %s\n", NR, $0} '
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 【求助】awk命令行输入多行问题

#3

帖子 aerofox » 2012-01-25 23:19

awk 的 printf 是允许加括号的,楼主的代码在我这不报错,看那错误信息,bash 好像没有把第三行当成 awk 命令参数的一部分。
头像
josephyoung
帖子: 158
注册时间: 2011-11-05 18:53
来自: 南极圈

Re: 【求助】awk命令行输入多行问题

#4

帖子 josephyoung » 2012-01-25 23:48

像你这种情况每行后面可以不用加 "\"的,首先确保你输入的单引号是正确的,然后将你代码不要带\输入试试还有没有报错
头像
dtczhl
帖子: 70
注册时间: 2011-04-17 11:44

Re: 【求助】awk命令行输入多行问题

#5

帖子 dtczhl » 2012-01-26 9:59

是不是系统不稳定阿??
我又输了一遍

代码: 全选

dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
> NF != 7{\
> printf("line %d, %s", NR, $0)}\
> $1 !~ /[A-Z]/{printf("line %d, nnnn:%s",  NR, 0)}'
没有问题

但我相同的又输了一遍

代码: 全选

dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
> NF != 7{\
> printf("abcdefg: %d %s", NR, $0)}\
bash: syntax error near unexpected token `('
又出现相同的问题了

而且有时输入换行符 \ 后没有换行,按了向上方向键敲回车又可以换行继续输入了

输出如图

代码: 全选

dtczhl@dtczhl-desktop:~$ 
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
> NF != 7{\
> printf("line %d, %s", NR, $0)}\
> $1 !~ /[A-Z]/{printf("line %d, nnnn:%s",  NR, 0)}'
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: ' \
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: ' cat /etc/passwd | awk -F: '\
> 
awk: cmd. line:1: cat /etc/passwd | awk -F: cat
awk: cmd. line:1:                   ^ syntax error
awk: cmd. line:1: cat /etc/passwd | awk -F: cat
awk: cmd. line:1:                         ^ syntax error
awk:  cat /etc/passwd | awk -F: 
awk:                    ^ syntax error
awk: cmd. line:1:  cat /etc/passwd | awk -F: 
awk: cmd. line:1:                          ^ syntax error
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
dtczhl@dtczhl-desktop:~$ cat /etc/passwd | awk -F: '\
> NF != 7{\
> printf("abcdefg: %d %s", NR, $0)}\
bash: syntax error near unexpected token `('
dtczhl@dtczhl-desktop:~$ 
回复