Как я могу вывести строку плюс подстановочный знак в Linux из файла?

Это звучит как проблема XY и что вы на самом деле хотите:

awk -F, '$2 == prev; {prev = $2}' < parsed_repayment.csv

То есть укажите строки, в которых второе поле совпадает со вторым полем предыдущей строки.

Для ответа на то, что вы спросили, в отличие от того, что вы на самом деле хотели, это будет:

cut -d, -f2 parsed_repayment.csv |
  uniq -d |
  xargs sh -c '
    for i do
      grep -e "$i" parsed_repayment.csv | tail -n +2
    done' sh

Но с некоторыми оговорками:

  • xargsпредполагает очень специфический формат ввода. Если значения второго столбца содержат пробелы, одинарные кавычки, двойные кавычки или обратную косую черту, это не будет работать должным образом.
  • grepпонимает это $iкак регулярное выражение . И даже если вы используете -Fили если эти строки не содержат операторов регулярных выражений (, таких как ., $... ), grepбудут искать эти строки в любом месте строки, не только в втором поле, не говоря уже о в точности как втором поле.

-1
31.01.2020, 20:02
2 ответа

Предполагая, что приведенный вами пример представляет собой одну строку в файле, вы можете использовать sed, чтобы удалить все до и все после поля, которое вы хотите после:

sed -E 's/.*,("disconnectReason"="[0-9]+"),.*/\1/' <file>

Это "запоминает" поле и значение, которые вас интересуют, используя заключенное в скобки выражение sub -, а затем использует \1для ссылки на первое (и только в этом случае )запомненное sub -выражение для замены строки while на.

Если вы действительно непреклонны в удалении двойных кавычек вокруг disconnectReason, я бы сделал это с другим фильтром sed, вместо того, чтобы усложнять регулярное выражение. Возможно, он менее эффективен, но гораздо легче читается :

.
sed -E 's/.*,("disconnectReason"="[0-9]+"),.*/\1/' <file> |
   sed -E 's/"(disconnectReason)"/\1/'
0
28.04.2021, 23:25

Много способов сделать это, основываясь на том, что вы сказали, этого должно быть достаточно для ваших нужд:

grep -oE '"disconnectReason"="[0-9]+"' yourfile

-oуказывает grepвернуть только совпадающую часть строки

1
28.04.2021, 23:25

Теги

Похожие вопросы