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"}'