簡體   English   中英

如何使用 awk 打印除特定字段之外的所有字段?

[英]How to use awk to print all fields excluding a specific field?

我有一個由 ^M 分隔的 100000 行文件。 以下是前 4 行。 我想從 100K 行文件中的每個偶數行中刪除 35=[etc]

{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000001, 63=1000000000000000000000000002, 38=000001, 11=000001, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604088, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127162,  37=500001000001,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=7B7AD380360E5C66,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000002, 63=1000000000000000000000000002, 38=000002, 11=000002, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604286, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127328,  37=500001000002,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=F55C5F27C8A91F31,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000003, 63=1000000000000000000000000002, 38=000003, 11=000003, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604997, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127295,  37=500001000003,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=CC3803D589D05384,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000004, 63=1000000000000000000000000002, 38=000004, 11=000004, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100605333, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127558,  37=500001000004,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=D9FB6238A83D8FDD,  59=0600094044, 60=123456789000, 7=1103145214}^M

輸出應該是這樣的

{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000001, 63=1000000000000000000000000002, 38=000001, 11=000001, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604088, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127162,  37=500001000001,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=7B7AD380360E5C66,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000002, 63=1000000000000000000000000002, 38=000002, 11=000002, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604286, 22=9000, 25=00, 3=010000, 32=12345678901, 37=500001000002,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=F55C5F27C8A91F31,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000003, 63=1000000000000000000000000002, 38=000003, 11=000003, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604997, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127295,  37=500001000003,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=CC3803D589D05384,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000004, 63=1000000000000000000000000002, 38=000004, 11=000004, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100605333, 22=9000, 25=00, 3=010000, 32=12345678901, 37=500001000004,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=D9FB6238A83D8FDD,  59=0600094044, 60=123456789000, 7=1103145214}^M

這可以在 vim 中使用g命令實現:

:g/35=[0-9]*, */ if getcurpos()[1] % 2 == 0 | s///g | endif

基本上我們要做的是:

  1. g命令搜索與正則表達式35=[0-9]*, *匹配的每一行,然后執行它后面的命令(在本例中為if語句)。
  2. 檢查光標位置是否與if getcurpos()[1] % 2 == 0
  3. 如果是偶數,則替換為空字符串s///g

更多關於g命令的力量在這里: https : //vim.fandom.com/wiki/Power_of_g

不確定 62=[digits] 或 11=[digits] 是否是可靠的行計數器。 但如果是,也許可以在 Vim 中考慮這樣的事情?

g/\v11\=\d+[0248],/s/\v, 35\=\d{10}//

這對偶數的 11=[digits] 進行過濾

g/\v62\=\d+[0248],/s/\v, 35\=\d{10}//

在 62=[digits] 上過濾偶數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM