2016-07-07 2 views
1

У меня есть текстовый файл, который выглядит следующим образом:Awk: считать все пространство до второго столбца как одну переменную?

This is the first line 80 55 75% 
Second line    25 95 74% 
The next line    50 50 50% 

Как вы можете видеть, на левой стороне число слов будет меняться. В настоящее время, если я использую команду:

awk 'NR == 1 {print $1,$2,$3,$4}' file 

Это работает отлично подходит для первой линии и возвратит:

This is the first line 

Но если я делаю это на второй линии:

awk 'NR == 2 {print $1,$2,$3,$4}' file 

Я получаю это, как и ожидалось:

Second line 25 95 

Но это не то, что мне нужно. Для сценариев мне нужен awk или, возможно, еще один инструмент, чтобы «видеть» что-либо до второго столбца чисел как одну переменную. Поэтому, независимо от количества слов с левой стороны, они всегда будут рассматриваться как одна переменная. Как я могу это достичь?

Примечание: я могу иметь такие строки:

This is a testmarket001 65 45 25% 

Так что я не думаю, что вы можете просто сказать AWK, чтобы напечатать все слова до первого числа, как это было бы отрезать часть линии ,

+0

У вас есть вкладки между колонками? Это облегчило бы жизнь. – fedorqui

+0

У вас будет только 3 col.s номеров в конце? Другой способ сделать жизнь легкой :) – Fazlin

+0

Почему бы просто не выбрать [a-z] [A-Z] только со всей строки? – SMA

ответ

1

Если есть всегда 3 пробельные разделяет слова в конце каждой строки вы можете использовать эту awk, чтобы получить результат:

awk '{gsub(/(\s+\S+){3}\s*$/, "")} 1' file 

This is the first line 
Second line 
The next line 

Вы также можете использовать sed:

sed -E 's/(\s+\S+){3}\s*$//' file 
1

Если ваш поля указаны в виде табуляции, просто установите разделитель для awk

$ paste file1 file2 file3 | awk -F'\t' '{print $1}' 

должен работать.

Обратите внимание, что команда column изменяет вкладки. Если ваш файл сохранен после форматирования column, вы можете попробовать это

$ awk '{for(i=1;i<NF-2;i++) printf "%s ",$i; print ""}' file 

This is the first line 
Second line 
The next line 
Смежные вопросы