awk指定列修改

2021-07-02 21:40:57 字數 2411 閱讀 5639

遇到個處理文字檔案的問題

cat test.txt

"355356"        "1700870"       "1"     "0202"  ""

"355356"        "1700871"       "2"     ""    "02046"   

"355356"        "1700870"       ""    "2"     "02046"    

"1700870"       "1700873"       ""    "1"     "0202" 

把第2列是1700870的資料改為1700888

起初我得想法是直接用sed,

sed -i "s,1700870,1700888,g"  test.txt

得到資料如下,一開始我認為這種方法並無問題,可後來發現犯了很傻的錯誤。 第一列的最後乙個欄位也被替換了。

"355356"        "1700888"       "1"     "0202"  ""

"355356"        "1700871"       "2"     ""    "02046"   

"355356"        "1700888"       ""    "2"     "02046"    

"1700888"       "1700873"       ""    "1"     "0202"

後來用awk去解決這個問題

思路是對第二列等於1700870的行做處理

awk -f "\"" ''  test.txt

什麼結果都沒有列印,後來在網上搜了一下,想列印處理過的文字要麼用print,要麼在最後加個1,這裡的1是個省略符,等價於 /.*/ 如下:

awk -f "\"" '1'  test.txt

結果如下

355356          1700888         1       0202     

"355356"        "1700871"       "2"     ""    "02046"   

355356          1700888               2       02046     

"1700870"       "1700873"       ""    "1"     "0202"

不知道為什麼引號沒了,准定不符合規則,原因是在awk處理每一行資料的時候會把輸出分隔符用預設的」空格「代替,所以我們發現每個

處理過的行都沒了引號。

搜尋了一下awk的用法,發現awk用法如下:

$0           表示整個當前行

$1           每行第乙個字段

nf          字段數量變數

nr          每行的記錄號,多檔案記錄遞增

fnr        與nr類似,不過多檔案記錄不遞增,每個檔案都從1開始

\t            製表符

\n           換行符

fs          begin時定義分隔符 rs

輸入的記錄分隔符, 預設為換行符(即文字是按一行一行輸入)

~            匹配,與==相比不是精確比較

!~           不匹配,不精確比較

==         等於,必須全部相等,精確比較

!=           不等於,精確比較

&&      邏輯與

||             邏輯或

+            匹配時表示1個或1個以上

/[0-9][0-9]+/   兩個或兩個以上數字

/[0-9][0-9]*/    乙個或乙個以上數字

filename 檔名

ofs      

輸出字段分隔符, 預設也是空格,可以改為製表符等

ors        輸出的記錄分隔符,預設為換行符,即處理結果也是一行一行輸出到螢幕

-f'[:#/]'   定義三個分隔符

可以在輸出時候自己指定輸出分隔符ofs。

awk -f "\"" ' 1'  test.txt

結果如下符合需求:

"355356"        "1700888"       "1"     "0202"  ""

"355356"        "1700871"       "2"     ""    "02046"   

"355356"        "1700888"       ""    "2"     "02046"    

"1700870"       "1700873"       ""    "1"     "0202"

但上面的awk語法太難看,所以改進一下

awk  'begin 1'  test.txt

把定義的輸入和輸出字元放到begin裡面,增強了程式的可讀性。

Python修改DBF檔案指定列

一 需求 某公司每日收到一批dbf檔案,a系統實時處理後將其中dealstat欄位置為1 已處理 現在每日晚間b系統也需要處理該檔案,因此需將檔案中dealstat欄位修改為空 未處理 二 分析 1 應建立副本進行修改 解答 使用shutil.copy 2 修改dbf 解答 使用dbf模組。此模組能...

讀取指定列

usr bin env python3 coding utf 8 import xlrd 開啟excel檔案,建立乙個workbook物件,book物件也就是fruits.xlsx檔案,表含有sheet名 rbook xlrd.open workbook key.xlsx sheets方法返回物件列...

awk取文字列 awk用法 取列表最後一列

很多時候我們有需要取出文字中的最後一列,或者比如 ls l 最後一列為檔名,這裡可以使用多種方法取出最後一列 舉例說明 root testserver tmp ls l 總用量 1000 rw r r 1 root root 925223 6月 15 18 06 0615.txt rw r r 1 ...