Как извлечь только некоторые поля из строки текста CSV

Это :vmstat 1 1 | sed -e 's/ +/ /g' | хвост -2 | вырезать -d' ' -f5

Или это :vmstat 1 1 | хвост -2 | тр -с ' ' | вырезать -d' ' -f5

-1
09.04.2020, 15:29
2 ответа

Если в файле нет поля со встроенной запятой или символом новой строки (, то есть это «простой файл CSV» ), вы можете получить первое и два последних поля из каждой строки с помощью

$ awk -F, 'BEGIN { OFS=FS } { print $1, $(NF-1), $NF }' file.csv
391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970

NF— это специальная переменная, которая содержит количество полей в каждой строке, и мы устанавливаем разделитель полей ввода и вывода на запятую. В блоке printмы печатаем только интересующие нас поля.

-1
28.04.2021, 23:18

Вы можете попробовать это:

grep -o "^[0-9]*\|,tran.*$" file | sed 'N;s/\n,/,/'

Выход:

391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970
0
28.04.2021, 23:18

Теги

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