linux shell指令碼awk替換中的NF跟NR的意義

2021-03-20 02:30:42 字數 6421 閱讀 7564

1樓:匿名使用者

nf表示第幾個欄位,每個欄位預設用空格分開。

nf-3的意思是倒數第三個欄位,ssh2是第-0個欄位,663951是第-1個欄位....

192.168.0.78是第-3個欄位。

2樓:匿名使用者

nf 是每行的欄位數

nr 是總共讀取了多少行

像awk $(nf-3) 就是倒數第四個欄位, 所以恰好是ip地址另注, 空格是欄位識別時的分隔符

3樓:匿名使用者

nf代表是每行的欄位數量

nr表示awk開始執行程式後所讀取的資料行數

awk中 nr 和 nf到底是什麼意思? 能舉例說明嗎?

4樓:匿名使用者

nr - number of record - 當前處理的行是第幾行(因為awk是流處理工具,一行一行處理的,所以nr在不停的自增1)

fnr - file number of record - 當前處理的行是當前處理檔案的第幾行

nf - number of fileds - 當前行有多少列資料(這個在每行都會根據設定的分割符重新計算,預設分割符是任意連續的多個空白符)

(nr==fnr) 大致等效於 (argind==1) , 一般用來判斷是不是在處理第一個檔案。

但區別是: 前者是判斷當前處理的總行數跟檔案內行數相等,而這種情況一般都是在第一個檔案上,而argind==1是引數位置第1的檔案時生效。—— 但,如果前面的檔案是空的,那麼nr==fnr就生效於第一個非空檔案,而argind==1不會。

這微妙的區別使它們可以應用於不同的需要。

實際使用中還可以用檔名判斷當前處理的是哪一個檔案。

上面幾種使用的環境: 用awk連續處理多個檔案時,比如 awk '命令序列' file1 file2 file* 這樣的情況下,判斷在處理哪個檔案了。

5樓:百度使用者

比如現在awk處理到第五行。第一行沒有進行操作,2,3,4,5行進行了操作,那麼nr=5,fnr=4

nr==fnr 表示從起始行到當前行,awk都進行了操作,比如修改,新增等等

簡單來說,nr就是當前讀取多少行,fnr就是當前修改了多少行,fnr<=nr

linux指令碼中awk是什麼awk後面接的nr是什麼意思

6樓:匿名使用者

nr==2就是

對第二行執行後面的操作,也就是 , 而print $0 的意思就是列印當前行,也就是第二行。所以

awk 'nr==n' file

這條命令的作用就是列印 file 檔案的第n行。

7樓:匿名使用者

把第二行記錄列印出來.

解釋:$ awk 'nr==2 ' filenamenr:記錄行號

$0:這一

行記錄例子:

$cat > test

aa bb cc

dd ee ff

gg hh ii

$>gawk 'nr==2 ' test

dd ee ff

8樓:舒彤雯彌半

$@:表示所有指令碼引數的內容

$#:表示返回所有指令碼引數的個數。

示例:編寫如下shell指令碼,儲存為test.sh#!/bin/sh

echo

"number:$#"

echo

"argume:$@"

執行指令碼:

./test.sh

first_arg

second_arg

說明:給指令碼提供了兩個引數,所以$#輸出的結果是2,$@代表了引數的內容!

linux shell 指令碼 wak語句中 awk 'begin { fs="'"'"'";rs="\n"} {for (i=2;i<=nf;i=i+2)

9樓:匿名使用者

fs表示操作的時候以什麼為分割符

rs表示記錄分割符(record separator)即rs表示的是awk操作最小單位的邊界,而fs是這個最小單位中分割的符號

例如:101,john doe:102,jason **ith:103,raj reddy

如果不指定rs,指定fs為「,」,那麼awk將101作為第一列,剩下的全部為第二列,如果指定rs=":",那麼awk就會將內容作為三「行」,第一列包括101,102和103,第二列包括john doe,jason **ith和raj reddy

10樓:滄海中一笑

其實fs="'"'"'";的意思是以 ' (單冒號)作為分隔符(貼上到這上面看著不是太清楚,你自己弄下)

linux-hg2:~ # echo '_"'"'"'"_'

_"'"_ (兩個雙冒號,中間一個單冒號)linux-hg2:~ # cat test.txtab'c'b

linux-hg2:~ # awk 'begin ' test.txt

ab c

linux-hg2:~ #

效果等同於fs="'\''" 雙冒號、單冒號、斜槓、單冒號、單冒號、雙冒號

11樓:匿名使用者

rs/ors:行輸入/輸出分隔符,預設回車

fs/ofs:欄位的輸入/輸出分隔符,預設為空格和製表符tab

上面的意思表示為:以「'」作為欄位分隔符,以換行作為行分隔符。

awk '{print $2}' 這個命令是什麼意思?

12樓:徜逸

一行一行的讀取指定的檔案, 然後以空格作為分隔符,列印第二個欄位。

比如有個檔案是testawk.txt,檔案內容如下:

11 22 33 44

55 66 77 88

執行」awk '' $textawk.txt:「的結果為:

1122

介紹awk是一種程式語言,用於在linux/unix下對文字和資料進行處理。資料可以來自標準輸入(stdin)、一個或多個檔案,或其它命令的輸出。

它支援使用者自定義函式和動態正規表示式等先進功能,是linux/unix下的一個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的功能,比如陣列、函式等,這是它和c語言的相同之處,靈活性是awk最大的優勢。

擴充套件資料

awk常用命令選項

1、-f fs   fs指定輸入分隔符,fs可以是字串或正規表示式,如-f:

2、-v var=value   賦值一個使用者定義變數,將外部變數傳遞給awk

3、-f scripfile  從指令碼檔案中讀取awk命令

4、-m[fr] val   對val值設定內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是bell實驗室版awk的擴充套件功能,在標準awk中不適用。

linux命令是對linux系統進行管理的命令。對於linux系統來說,無論是**處理器、記憶體、磁碟驅動器、鍵盤、滑鼠,還是使用者等都是檔案;

linux系統管理的命令是它正常執行的核心,與之前的dos命令類似。linux命令在系統中有兩種型別:內建shell命令和linux命令。

13樓:足壇風行者

linux中shell命令段awk ''的意思是選取並輸出第二列的資料。

awk是一個文字分析工具,他可以把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理,$2 是指第二個切片。print $2是列印第二個切片的值。

使用方法:awk '' 。

例如使用命令 last -n 1輸出一行資料:

root     pts/1   192.168.1.100  tue feb 10

則 last -n 5 | awk  '' 命令輸出的是:

root

擴充套件資料

呼叫awk的三種方式介紹

1、命令列方式

awk [-f  field-separator]  '***mands'  input-file(s)

其中,***mands 是真正awk命令,[-f域分隔符]是可選的。 input-file(s) 是待處理的檔案。在awk中,檔案的每一行中,由域分隔符分開的每一項稱為一個域。

通常,在不指名-f域分隔符的情況下,預設的域分隔符是空格。

2、shell指令碼方式

將所有的awk命令插入一個檔案,並使awk程式可執行,然後awk命令直譯器作為指令碼的首行,一遍通過鍵入指令碼名稱來呼叫。

相當於shell指令碼首行的:#!/bin/sh

可以換成:#!/bin/awk

3、將所有的awk命令插入一個單獨檔案,然後呼叫:

awk -f awk-script-file input-file(s)

其中,-f選項載入awk-script-file中的awk指令碼,input-file(s)跟上面的是一樣的。

14樓:匿名使用者

$2:表示第二個欄位

print $2 : 列印第二個欄位

awk '' $filename : 一行一行的讀取指定的檔案, 以空格作為分隔符,列印第二個欄位

比如有這樣一個檔案

a1 b1 c1 d1

a2 b2 c2 d2

執行的結果是,輸出

b1b2

15樓:匿名使用者

zhangsan 25 男

上面的內容被空格分為三個部分,依次為zhangsan 25 男在awk中就分別對應$1 $2 $3

print $2的話就會輸出25

awk 'nr==1 {print $1} 這句shell語句是什麼意思

16樓:匿名使用者

列印第一行的第一個欄位,預設分隔符為 空格或製表符tab (都可以)。

源資料可以是通過管道傳遞過來的多行字串,也可以是檔案。

例如:echo -e "a b c\nd e f\ng h i" | awk 'nr==1 '

或者:awk 'nr==1 ' file.txt

17樓:匿名使用者

awk 'nr==1' file

nr==1 定位在file的第一行

print $1 顯示第一列內容

18樓:匿名使用者

1 樓正解, 未指定分割符 預設是空格

linux shell指令碼中printf列印的時候怎麼不足2位補空格 5

19樓:匿名使用者

用printf控制格式輸出最簡單:

echo "11 22 33"|awk ''

如果非要用print:

echo "11 22 33"|awk 'begin;print $0}'

還有sed寫法,不過要用正規表示式

20樓:認不倒你

echo "1 2 3" | awk ''

shell指令碼替換a、b兩個檔案裡面的內容

21樓:匿名使用者

先讀取a檔案中那行內容,

然後通過awk獲取b檔案中的第五行內容,替換後重新覆蓋寫入a檔案。

**如下:

#!/bin/sh

a=/usr/123.txt

b=/tem/456.conf

read line <$a

awk -v a=$line 'nr==5' $b >$a

22樓:小米飛貓

#!/bin/bash

a=`cat a`

b=`head -n 1 b`

sed -i "s/a/b" b

sed -i "s/b/a" a

23樓:

可以使用sed進行操作,先定義一個引數讀取a檔案中的第一行 linea=`sed...` 或者是使用cat把內容讀取出來,再使用sed的替換方法,將b檔案中的第一行替換為$linea即可。希望有幫助

shell指令碼中怎麼輸出第二列為指定內容的所有行的資訊

24樓:匿名使用者

寫個指令碼,使用for迴圈,設一個變數i 代表的是行號,從1開始,然後每次執行加1,類似

於a=`cat file|wc -l`

for (( i = 0; i < = $a; i++ ))doj = `cat file |awk "nr==$i"|awk ''`

k =`cat file |awk "nr==$i"`if [[ j -eq *** ]];

then echo $k

fidone

沒有測 但是大概就是這麼個意思

awk處理多個檔案,關於awk兩個檔案進行比對的問題

root localhost cat afor i in ls free dob awk i d ls i awk f c awk green d expr b c delta ddone root localhost cat free 1df 12 12 root localhost cat gr...

shell本地指令碼呼叫遠端指令碼當遠端指令碼執行完再繼

bin bash 呼叫expect指令碼執行遠端sh expect c set timeout 10000 spawn ssh usr ip expect assword expect send sh 1 r expect echo ls l 其中timeout時間需要設定足夠長,不然會連線超時斷掉...

linux shell怎麼歸類出檔名類似的檔案

ls1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 4 1 ae 2 1 1 2 1 2 2 1 3 2 1 4 2 2 1 2 2 2 3 1 2 3 1 3 a 1 af a d 1 adgfa ls grep 0 9 0 9 0 9 1 1 1 1 1 2 1 1 3 1 1 4 ...