2013-03-11 3 views
0

У меня есть файл, который был привинчен вверх по программе и теперь каждая строка выглядит примерно так:Bash: как изменить первый столбец файла и только первый столбец

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

(Tab разделителей) Что мне нужно сделать, это изменить каждую строку так, чтобы первый столбец, если он в формате somelengthystring: number, был изменен на простое число (избавиться от строки и двоеточия)

Я знаю, что могу использовать раскол в awk, чтобы избавиться от струны и толстой кишки, как:

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

Но дело в том, что я не хочу только первую колонку. Я хочу всю строку и хочу, чтобы первый столбец был исправлен. Единственная проблема заключается в том, что существует так много столбцов, что было бы довольно глупо печатать $ 2, $ 3, ... вплоть до 35 долларов или что-то еще. Что это лучший способ исправить это?

+0

ли * somelongstring * есть место в нем? –

+0

Возможно. Насколько я могу судить, нет, и это не должно. Но размер файла около 500 МБ, поэтому не удалось проверить каждую строку. – Joe

+0

Если у него есть место или двоеточие, он может стать волосатым. Я пытаюсь придумать, как бороться с этими случаями. –

ответ

0

Использование sed. Удалите все символы с начала строки (^) до первого двоеточия.

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

Использование Perl вы можете сделать это:

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

Если то, что у вас есть дела до сих пор, за $ 2 за исключением того, .... часть:

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

Использование cut

cut -d: -f2- file.txt 

Это использует двоеточие как разделитель и сохраняет все справа от него.

0

Если только формат somelengthystring:number в первом TAB-разделителями поле должно быть изменено, вы можете попробовать это:

awk '$1~/:[0-9]*$/{sub(/.*:/,x,$1)}1' FS='\t' OFS='\t' file 
Смежные вопросы