awk '/^/' пустой вывод (полная команда внутри)

cat /path/to/file  | awk '{if ('/^TCF/' || '/^FSTL/' ) print $0;}' > /path/to/output.txt

Привет! Это создает пустой вывод, однако он работает с "документом textedit", но не с этим "простым текстовым документом". Кроме этого, его ничем не отличается, только то, что он не работает.

cat /path/to/file  | awk '{if ($3=="TCF1" || $3=="FSTL7T2" || $3=="GLI3") print $0;}'

Этот работает нормально, но я хочу, чтобы все имена начинались с TCF, а не только с TCF1.

Пожалуйста помоги!

3 ответа

Решение

Вместо

cat /path/to/file  | awk '{if ('/^TCF/' || '/^FSTL/' ) print $0;}' > /path/to/output.txt

ты можешь использовать

awk '/^TCF/ || /^FSTL/' /path/to/file > /path/to/output.txt

Заметка '/^TCF/' неправильно, должно быть только /^TCF/, Кроме того, избегайте использования cat как файл может быть задан в качестве параметра awk, В заключение, print $0 действие по умолчанию awk, так что вы можете пропустить это.

Спасибо, парни! Это помогло мне решить эту проблему, но я получил следующее:

cat / path / to / file1 / path / to / file2 | awk '{if ($ 3 ~ / ^ TCF / || $ 3 ~ / ^ GLI /) print $ 0;}'> /path/to/test1.txt

Но знаете ли вы, как:

  1. Включить первую строку в file1 в вывод test1.txt?
  2. И можно ли включить, если TCF и GLI пришли из file1 или file2?

Это должно работать:

awk '/^TCF/||/^FSTL/' /path/to/file  >output.txt

Проблема с вашим утверждением:

awk '{if ('/^TCF/' || '/^FSTL/' ) print $0;}'

должно быть:

awk '{if ($0~/^TCF/ || $0~/^FSTL/ ) print $0;}'
Другие вопросы по тегам