2015-10-25 1 views
1

Я копирую столбец с awk и копируя его в новый файл и пытаясь удалить пробел в файле после его копирования в одной строке, не справившись с этим, здесь то, что я до сих пор:Удаление пробела при копировании столбца в одной строке

awk '{print $2}' input_file.txt > test.txt | sed -r 's/\s+//g' test.txt 

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

//emptyline 
//emptyline 
1 
2 
3 
4 

после удаления пустого пространства

1 
2 
3 
4 
+0

Вам не нужно СЕПГ, когда вы уже используете AWK. Ваша команда sed не удаляет пустые строки, она удаляет последовательности смежных пустых символов в каждой строке (если ваша команда поддерживает '\ s' сокращение для' [[: space:]] '). Какой ты хочешь? –

ответ

3

Просто дайте AWK делать всю работу:

awk '$2{ print $2 }' 

Awk расщепляется на пробельных по умолчанию. Если второе поле оценивается как «истинное», то указанное выше выражение напечатает это второе поле.

Если это второе поле может быть «0» или другая строка, которая оценивается как «ложь», или если ваш разделитель полей не является пробелом, вам нужно быть немного более явным.

'$2 ~ /[^[:space:]]/{ print $2 }' 

(Регулярное выражение [^[:space:]] соответствует строке, которая содержит по меньшей мере один непробельным символов.)

+0

спасибо, что было очень просто! – octain

+1

команда может выйти из строя, если значение второго столбца равно нулю '0' –

+0

Не только если это ** **, но и любая строка, которая может быть равна нулю. Вам нужно проверить '$ 2! =" "'. Кроме того, '. *' S являются избыточными в '/.* [^ [: space:]]. * /', Вы можете просто написать '/ [^ [: space:]] /', поскольку только это 'соответствует строка, содержащая хотя бы один символ без пробелов', и если у вас есть '$ 2 ~/[^ [: space:]] /', вам не нужно '&&' с '$ 2', если вы специально не пытаетесь для исключения значения нуля вместо пустого. Я действительно не уверен, что этот второй сценарий должен делать в любом случае. –

Смежные вопросы