在终端中粘贴特定列的方法

在终端中粘贴特定列的方法

我只想粘贴终端内的第三列数据。

我最初有类似的东西:

4 SF0086 SF0086
12 SF0087 SF0087
17 TSF141 TSF141
29 TSF070 TSF070
30 TSF028 TSF028   
31 TSF122 TSF122

我将其复制并粘贴到终端中,它变成一行

4 SF0086 SF0086 12 SF0087 SF0087 17 TSF141 TSF141 29 TSF070 TSF070 30 TSF028 TSF028 31 TSF122 TSF122

我想得到它像:

SF0086
SF0087
TSF141
TSF070
TSF028
TSF122

我可以将一行(中间)选项保存为一个文件,然后使用类似awk,sedperl或通用 POSIX 系统中可用的任何选项,但还没有弄清楚。我对这个命令也没有运气paste,我得出的结论paste是无法为我做到这一点。每次我需要提取第三列时,数据都会发生变化(意味着间距会发生变化)。有数据提取器/格式化大师吗?

答案1

'cut' 是您正在寻找的命令。您指定要使用的分隔符(我相信空格是默认值)以及您想要的列。手册页将列出所有详细信息。

您必须确保粘贴时其换行符完好无损,才能正常工作。

答案2

对我来说最有效的方法是,因为我总是有重复项,编号(-f 字段)总是会改变,而且我的列表可能有数百个字段长,但事实cut证明这并不是一个有效的选择。

这就是我想要的结果:

sed -e 's/\s\+/\n/g' data.txt > data_cr.txt && sort data_cr.txt | uniq -d > final.txt

在哪里:

sed -e 's/\s\+/\n/g' data.txt > data_cr.txt

强制所有文本(以空格分隔)独占一行,并将其写入新文件 data_cr.txt...并且

sort data_cr.txt | uniq -d > final.txt

逐行获取数据并仅打印任何重复项的单个副本。

相关内容