在 bash 中更改列中的名称

在 bash 中更改列中的名称

我在 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"

我想仅保留第二列名称的第一部分。我知道我必须使用cutsed,但我想不出命令的结构。我想要的输出是

~$ head list.tab

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

我一直在尝试awkgsub但是我已经很长时间没有使用 Linux 了,如果能得到帮助我将非常感激。

非常感谢

答案1

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 恢复为原始值

相关内容