3

awkを使用してテキストファイルを変更しようとしています。3つの列があり、最初の列のテキストの一部を削除したいと思います。

range=chr1      20802865        20802871        
range=chr1      23866528        23866534

chr1      20802865        20802871        
chr1      23866528        23866534

これどうやってするの?

試しましawk '{ substr("range=chr*", 7) }'awk '{sub(/[^[:space:]]*\\/, "")}1'が、ファイルの内容がすべて削除されます。

4

3 に答える 3

6

フィールドセパレータをとして設定し=、2番目のフィールドを印刷します。

# With awk                                                                     
$ awk -F= '{print $2}' file
chr1      20802865        20802871        
chr1      23866528        23866534

# Or with cut
$ cut -d= -f2 file                  
chr1      20802865        20802871        
chr1      23866528        23866534

# How about grep
$ grep -Po '(?<==).*' file
chr1      20802865        20802871        
chr1      23866528        23866534

# Temp file needed
$ cut -d= -f2 file > tmp; mv tmp file

両方awkcutおよびgrep変更を元に保存する場合は一時ファイルが必要な場合は、次fileを使用することをお勧めしますsed

 sed -i 's/range=//' file

range=これは何も代用せず-i、変更がインプレースで行われることを意味するため、一時ファイルを処理する必要はありsedません。

于 2012-12-05T15:48:01.113 に答える
1

ファイルの区切り文字としてスペースの代わりにタブを使用しているようです。したがって、次のようになります。

awk 'BEGIN{FS="[=\t]"; OFS="\t"} {print $2, $3, $4}' input_file

また

awk 'BEGIN{FS="[=\t]"; OFS="\t"} {$1=""; gsub("\t\t", "\t"); print}' input_file
于 2012-12-05T15:47:49.850 に答える
1

を使用する必要がない場合はawk、を使用できますsed。これは少し簡単です。^とのような正規表現演算子に精通していることを願っています.

$ cat awkens
range=chr1      20802865        20802871
range=chr1      23866528        23866534
$ sed 's/^range=//' awkens
chr1      20802865        20802871
chr1      23866528        23866534
于 2012-12-05T15:51:52.687 に答える