如何从tsv文件中提取第一列?

Sae*_*eko 6 awk cut sed

我有一个包含一些数据的文件,我只想将第一列用作脚本的标准输入,但提取时遇到了麻烦。我尝试使用这个

awk -F"\t" '{print $1}' inputs.tsv
Run Code Online (Sandbox Code Playgroud)

但只显示第一列的首字母。我尝试了其他一些方法,但是它要么显示整个文件,要么仅显示第一列的第一个字母。

我的文件如下所示:

Harry_Potter    1
Lord_of_the_rings    10
Shameless    23
....
Run Code Online (Sandbox Code Playgroud)

cod*_*ter 7

您可以使用cut在所有Unix和Linux系统上可用的:

cut -f1 inputs.tsv
Run Code Online (Sandbox Code Playgroud)

您不需要指定-d选项,因为tab是默认的定界符。来自man cut

 -d delim
         Use delim as the field delimiter character instead of the tab character.
Run Code Online (Sandbox Code Playgroud)

正如本杰明正确说的那样,您的awk命令确实是正确的。Shell将文字\ t作为参数传递,而awk确实将其解释为制表符,而其他命令则cut可能不这样做。

在Bash中,正确的表示方式是使用ANSI引号,如下所示:

awk -F$'\t' '{print $1}' inputs.tsv
Run Code Online (Sandbox Code Playgroud)

不知道为什么只得到第一个字符作为输出。


您可能需要看一下这篇文章:

  • 我认为您说“ \\ t”不会转换为选项卡不正确。外壳程序不会将其用双引号引起来,然后awk将* \ t解释为选项卡。另外,`$'\ t'`仅是Bash。我很确定`awk -F“ \ t”'{print $ 1}'`是POSIX兼容的方式,用于打印每行的第一个制表符分隔字段。例如:`awk --posix -F“ \ t”'{print $ 1}'<<< $'1 \ t2'` (2认同)
  • @BenjaminW。是正确的,而'awk -F'\ t'`也可以,您不需要'awk -F $'\ t'`的抨击。在这种情况下,单引号和双引号之间的区别也不重要。 (2认同)