Вырезание символов из определенных строк, если выполняется условие, в противном случае печать всей строки - PullRequest
1 голос
/ 08 августа 2011

Я хочу вырезать символы nN строки, но ТОЛЬКО если строка начинается с определенных символов, в противном случае я хочу напечатать всю строку.

Пример упрощенного файла:

John
123456987123
Mark
123546792019

Я хочу сделать два новых файла, один с первыми 6 числами, а другой с последними 6 числами, но все еще содержащий заголовки, поэтому

John
123456
Mark
123546

John
987123
Mark
792019

Могу я сказатьgrep cut, чтобы вырезать только в случае совпадения строки, но в противном случае дать весь файл?Какой вид команды awk может разрезать строки, если выполняется условие, или иным образом выводить всю строку?

Спасибо

Ответы [ 3 ]

2 голосов
/ 08 августа 2011

Grep может только grep, а не cut.

awk '/^[0-9]/{print(substr($0,0,6));next;}
        # Fall through here in case of no match
        {print}' inputfile
1 голос
/ 09 августа 2011

Вы можете сгенерировать 2 файла в одном скрипте sed, читая ваш входной файл только один раз.Поместите нижеследующее в текстовый файл и выполните команду sed -f script_file input_file.Он сгенерирует файлы f1 и f2 и выведет входной файл.

/^[^0-9]/{
w f1
w f2
}
/^[0-9]/{
h
s/^\(.\{6\}\).*/\1/
w f1
g
s/^.\{6\}//
w f2
g}
0 голосов
/ 10 августа 2011

grep должно быть хорошо:

grep -E -o '^[0-9]{6}|^[^0-9].*' input > first.txt
grep -E -o '[0-9]{6}$|^[^0-9].*' input > last.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...