linuxshellawkif
㈠ linux下Shell使用if语句判断是否有test用户存在,如存在,显示该用户的UID,不存在则显示"no such user"
#!/bin/sh
su - test
if [ $? -eq 1 ]
then
echo "no such user"
else
echo `cat /etc/passwd|grep test|awk -F: '{print $3}'`
fi
应该不需要解释吧!!!!
㈡ 在linux shell中用awk如何实现这个问题:
你这个题目很有意思,你看我脚本对么:
awk -F "[,]" 'BEGIN{b="";}{
if (a[$1$4]) {
split(a[$1$4],value,",");
if( $2 <= value[2]) {
a[$1$4]=value[1]","$3;
b=$1","a[$1$4]","$4;
} else {
b=$1","a[$1$4]","$4;
printf("%s\n",b);
a[$1$4]=$2","$3;
b=$1","a[$1$4]","$4;
};
}else {
printf("%s\n",b);
a[$1$4]=$2","$3;
b=$1","$2","$3","$4;
};
}END{printf("%s\n",b);}' test.txt
㈢ shell中awk中if判断
你直接运行grep '2018-06' gprs_c* | grep $num |more 看下是不是有输出?
如果提示
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
就是num没有赋值
然后看下awk那里,我这里举了个例子,可以试试下里面例子中的引号
$catgprs_c
2018-06-02;447956815999;2018-06-0200:00:00
2018-06-03;447956815999;2018-06-0300:00:00
2018-06-04;447956815999;2018-06-0400:00:00
$grep'2018-06'gprs_c*|grep'447956815999'|awk-F";"'{if($3<"2018-06-0300:00:00")print$1}'
2018-06-02
$date1="2018-06-0300:00:00"
$grep'2018-06'gprs_c*|grep'447956815999'|awk-F";"'{if($3<"'"$date1"'")print$1}'
2018-06-02
㈣ linux shell脚本为什么不能执行if命令
autoreboot.sh: line 9: [0=1]: command not found
----
f [$LOAD_VULE=1]
这里错了,要改成
f [ $LOAD_VULE -eq 1 ]
特别强调下,"["后面有空格,“]”前面有空格。
㈤ Linux的shell,sed或awk之类工具替换函数
can't really understand
something like this?
nc10@your-5554c55be4 ~
$ cat bb
#! /bin/bash
while read -r;
do
if [[ "$REPLY" =~ (int my_function)( .*) ]]
then
REPLY=${BASH_REMATCH[1]}"_bk"${BASH_REMATCH[2]}
else
REPLY=$REPLY
fi
printf "%s\n" "$REPLY"
done < test.c >> urfile
nc10@your-5554c55be4 ~
$ rm urfile
rm:是否删除 普通文件 “urfile”? y
nc10@your-5554c55be4 ~
$ sh bb
nc10@your-5554c55be4 ~
$ cat urfile
int my_function_bk (int i)
{
if(i>0){
printf("TRUE\n");
retrun 0;
}else{
printf("FALSE\n");
retrun 1;
}
}
nc10@your-5554c55be4 ~
$
㈥ 菜鸟提问:linux shell awk
# echo "12 0 7 35 24 103 0 389 287 0" | awk '{split($0,tA," ");for(k in tA){if(tA[k]%2!=0){printf("%d ",tA[k]);}};printf("\n");for(k in tA){if(tA[k]%2==0){printf("%d ",tA[k]);}};printf("\n");for(k in tA){if(tA[k]==0){printf("%d ",tA[k]);}};printf("\n")}'
结果:
7 35 103 389 287
0 12 0 24 0
0 0 0
㈦ 急!两道linux shell awk编程题请教!
1 第一题 data.tmp是文件名
awk -F'&&' '{a[$1]+=$2}END{for(i in a)print i,a[i]}' data.tmp
2 先去吃早点 等等在作
awk -F'|' 'NR==FNR{a[$1]=$2}NR>FNR{if($1 in a)print $0,a[$1]}' f1 f2
这样就可以了, 但是只限于这个特例, 如果第一列会有重复出现, 就有bug了。 或者在第二个文件的第一列中的数值在第一个文件中没有出现过,也会有bug
㈧ Linux shell awk怎么去除行内,重复列
awk-F"[-,]"'{for(i=1;i<=NF;i++)a[$i,NR]++}{for(jina){split(j,b,SUBSEP);if(b[2]==NR)printfb[1]""}printf" "}'关键词.txt>去除重复后.txt
以此例测试通过。
关于awk二维数组的使用:
awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4] = 1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP ( 34)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2 344。
类似一维数组的成员测试,多维数组可以使用if ( (i,j) in array)这样的语法,但是下标必须放置在圆括号中。
类似一维数组的循环访问,多维数组使用for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。split ( item, subscr, SUBSEP)。
㈨ Shell awk命令嵌套if...elif... else写法
awk '
{
if ($1==1)
print "A"
else if ($1==2)
print "B"
else
print "C"
}'
#命名为1.sh
执行方法:echo "1" | sh 1.sh
写成一行:
echo "3" | awk '{if ($1==1) print "A"; else if ($1==2) print "B"; else print "C"}'