Bash:如何更改文件的第一列和第一列

时间:2013-03-11 21:19:07

标签: linux bash scripting awk text-parsing

我有一个被程序搞砸的文件,现在每行都看起来像这样:

somelongstring:number   number    number   number   ... a lot more columns

(制表符分隔) 我需要做的是修改每一行,使第一列,如果它的格式为somelengthystring:number,则更改为只是数字(去掉字符串和冒号)

我知道我可以在awk中使用split来摆脱字符串和冒号,如:

awk '{
   split($1,array,":")
} 
END{
   print array[2],$2,$3...
}'

但问题是我不想只是第一列。我想要整行,只想修复第一列。唯一的问题是,有这么多的列,输入2美元,3美元,......一直到35美元或者其他任何东西都是相当愚蠢的。有什么更好的解决方法?

5 个答案:

答案 0 :(得分:1)

使用Perl你可以这样做:

cat file.txt | perl -pe 's/.*?://'

答案 1 :(得分:1)

如果你到目前为止所做的工作,除了$ 2,......部分:

awk '{
    split(..)
    $1=array[2]
    print
}'

答案 2 :(得分:1)

使用sed。从行的开头(^)删除所有字符,直到第一次冒号。

sed 's/^[^:]*://' infile

答案 3 :(得分:0)

使用cut

cut -d: -f2- file.txt

它使用冒号作为分隔符,并将所有内容保留在其右侧。

答案 4 :(得分:0)

如果只更改第一个TAB分隔字段中的格式somelengthystring:number,您可以尝试这样做:

awk '$1~/:[0-9]*$/{sub(/.*:/,x,$1)}1' FS='\t' OFS='\t' file