2017-05-09 46 views
-2

我想問一下,我如何在Linux下使用命令刪除一些字符串?如何使用awk/sed或linux中的其他命令刪除一些字符串?

cat /data/filename.txt 
A|2|3|4|5|6|7|8|9|10|0030|12|05/09/17 
B|2|3|4|5|6|7|8|9|10|00045|12|05/09/17 
C|2|3|4|5|6|7|8|9|10|061|12|05/09/17 

和輸出:

cat /data/filename.txt 
A|2|3|4|5|6|7|8|9|10|30|12|05/09/17 
B|2|3|4|5|6|7|8|9|10|45|12|05/09/17 
C|2|3|4|5|6|7|8|9|10|61|12|05/09/17 
+0

不夠清楚。你想刪除任何列中的所有前導0,或只是第二列最後一列或第十列(假設爲0基礎),或只是前面的「11」(在任何列)前面的零? – John3136

+0

只是第10列先生,所有在前面的列。 另一個示例: 2014 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 0019 | 12併成爲2014 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 19 | 12 – wirawiri

回答

1

嘗試:

awk -F"|" '{sub(/^0+/,"",$11)} 1' OFS="|" Input_file 

使得現場分離器|然後根據您的要求用NULL的第111個字段替換起始零,提及1將打印新編輯的行(如果將零替換爲NULL),將輸出字段分隔符設置爲|然後提及Input_file。

編輯:添加第二個解決方案,將-000移除到第11個字段中,如下所示。

awk -F"|" '{sub(/^0+/,"",$11);sub(/-0+/,"-",$11)} 1' OFS="|" Input_file 

這裏我正在製作|作爲字段分隔符,然後用NULL替換第11個字段中的起始零,然後用-0代替-0代表所有的零到這裏的NULL,然後1將打印行。將輸出字段分隔符設置爲|太。

+0

快樂 – RavinderSingh13

+0

hai @ravinder,我可以再問你一次嗎? 事實證明,如果格式轉換成這個A | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 0030-00456 | 12 | 05/09/17所以我需要這個A | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30-456 | 12 | 05/09/17你有想法如何變成這樣? – wirawiri

+0

@wirawiri:請現在看我編輯的答案,讓我知道這是否有助於你。 – RavinderSingh13

0
awk 'BEGIN{FS=OFS="|"} {for(i=1;i<=NF;i++)$i=sprintf("%d", $i)}1' /data/filename.txt 

2014|2|3|4|5|6|7|8|9|10|11|12 
2015|2|3|4|5|6|7|8|9|10|11|12 
2016|2|3|4|5|6|7|8|9|10|11|12 

假設:您的文件包含由|

+0

哦,我的壞,有一些字符是在字符串值:(:(和那個字符串將成爲0值正確嗎?) 我會解決我的問題,以避免 – wirawiri

1

另一種選擇分隔使用awk只有整數值:

awk -F\| -vOFS=\| '{$11+=0}1' file 
+0

請告訴我們發生了什麼! –

相關問題