1

У меня есть файл с разделителями табуляции в Linux, который выглядит следующим образом

~$ head list.tab
"x"
"1" "FUHGF.jnf.m22-1"
"2" "HDFHFEY.gfs.d2-1"
"3" "KJFGJF.fr.md2-1"
"4" "SDFSDIB.gfd.rtl2-1"
"5" "FGJFGOB.hgd.k2-5"
"6" "HJLHEH.fc.po2-1"
"7" "GFHFGV.gfn.col2-1"
"8" "KLAA.ghn.xil2-3"
"9" "KJGGFG.hgr.col2-2"

Я хотел бы оставить только первую часть названия второго столбца. Я знаю, что мне придется использовать cut и sed , но я не могу думать о структуре команды. Мой желаемый результат

~$ head list.tab

"FUHGF"
"HDFHFEY
"KJFGJF"
"SDFSDIB"
"FGJFGOB"
"HJLHEH"
"GFHFGV"
"KLAA"
"KJGGFG"

Я пробовал использовать awk и gsub но долгое время не пользовался Linux, помощь была бы признательна.

Большое спасибо

2 ответа2

4

cut -sf2 -d' ' list.tab|sed -e 's/\..*/\"/'

имея в виду

  1. вырезать только второе поле в строках с разделителями (пробел)
  2. замените точку и все, что следует, кавычками.
2

awk '$2 {oFS=FS; FS="."; $0=$2; print $1"\""; FS=oFS}' input

Для всех строк, которые имеют второе поле:

  • сохранить текущее значение FS
  • установите FS в.
  • заставить awk заново разделить второе поле на новом FS
  • напечатать первое поле (и конечный кавычка)
  • установить FS обратно в исходное значение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .