我在 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 了,如果能得到帮助我将非常感激。
非常感谢
答案1
cut -sf2 -d' ' list.tab|sed -e 's/\..*/\"/'
意义
- 仅剪切带分隔符(空格)的行中的第二个字段
- 用引号替换点及其后面的任何内容。
答案2
awk '$2 {oFS=FS; FS="."; $0=$2; print $1"\""; FS=oFS}' input
对于所有具有第二个字段的行:
- 保存当前 FS 值
- 将 FS 设置为 。
- 强制 awk 在新的 FS 上重新拆分第二个字段
- 打印第一个字段(和尾随的引号)
- 将 FS 恢复为原始值