[英]Modifying text using awk
我正在嘗試使用awk修改文本文件。 有三列,我想刪除第一列中的部分文本:
range=chr1 20802865 20802871
range=chr1 23866528 23866534
至
chr1 20802865 20802871
chr1 23866528 23866534
我怎樣才能做到這一點?
我試過awk '{ substr("range=chr*", 7) }'
和awk '{sub(/[^[:space:]]*\\\\/, "")}1'
但它刪除了所有文件的內容。
將字段分隔符設置為=
並打印第二個字段:
# 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
如果要將更改存儲回file
, awk
, cut
和grep
都需要臨時file
,更好的解決方案是使用sed
:
sed -i 's/range=//' file
這替換了range=
什么都沒有, -i
意味着更改是就地完成的,所以不需要處理臨時文件的東西,就像sed
為你做的那樣。
看起來您在文件中使用制表符而不是空格作為分隔符,因此:
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
如果你不需要使用awk
,你可以使用sed
,我覺得它有點簡單。 希望你熟悉正則表達式運算符,比如^
和.
。
$ cat awkens
range=chr1 20802865 20802871
range=chr1 23866528 23866534
$ sed 's/^range=//' awkens
chr1 20802865 20802871
chr1 23866528 23866534
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.