awk для фильтрации строк в файле путем удаления шаблона - PullRequest
0 голосов
/ 31 октября 2019

Попытка использовать awk для удаления IonCode_4 digits (всегда 4 могут отличаться) и оставить расширение файла. Является ли ниже лучший способ? Спасибо:).

файл

1112233  ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_zzzz_zzz_zzz_zzz_zzz_zzz.txt
1112231  ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_zzzz_zzz_zzz_zzz_zzz_zzz.txt

awk

awk '/_tn_/ {next} gsub ("^.*/|_.*$|IonCode_...._", "", $2)'f

текущий

1112233  000000-Control
1112231  000000-Control  

желательно

1112233  000000-Control.txt
1112231  000000-Control.txt

Ответы [ 3 ]

2 голосов
/ 01 ноября 2019

Разделите записи на 1+ пробелов или подчеркиваний, поэтому 4-е поле будет интересующей вас частью.

awk -F '[[:space:]]+|_' '!/_tn_/{print $1,$4".txt"}' file
1 голос
/ 31 октября 2019

с sed

$ sed -E 's/ID_[0-9]{4}_([^_]+).*(\..*)/\1\2/' file

1112233  000000-Control.txt
1112231  000000-Control.txt
1 голос
/ 31 октября 2019

Не могли бы вы попробовать следующее. Я думаю, это проще всего, хотя мы могли бы сделать это с указанием числа полей, но это будет больше похоже на жесткое кодирование чисел, поэтому я выбрал этот подход здесь.

awk '
{ 
  sub(/[^_]*_/,"",$2) 
  sub(/[^_]*_/,"",$2)
  sub(/_.*/,".txt")
}
1
' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...