2017-05-09 21 views
-2

私は質問したい、どのように私はLinuxでコマンドでいくつかの文字列を削除することができますか?linuxでawk/sedや別のコマンドを使って文字列を削除するには?

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

十分明確ではありません。あなたは(任意の列で)「11」の前の任意の列内のすべての主要な0またはちょうど第二最後の列またはちょうど10列(ベース0を仮定して)、または単に先頭のゼロを削除したいですか? – 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

try:

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

フィールドセパレータを|必要に応じて最初のゼロを111番目のフィールドのNULLに置き換えます.1を指定すると、新しく編集された行(0があればNULLに置き換えられた場合)が出力され、出力フィールドの区切り文字は| Input_fileに言及してください。

EDIT: -000を第11フィールドに削除する第2の解決策を以下のように追加する。

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

ここに私が作っている|フィールドセパレータとして11番目のフィールドの開始零点をNULLに置き換え、次に-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

は何が起こっているかを教えてくださいすることを避けるために、私の質問を修正しますがあり –

関連する問題