在 Unix Shell 脚本中的 Cut 中使用制表符分隔符

Pra*_*rma 6 shell-script echo cut

我有input.txt以下 TAB 分隔格式的数据文件-

23776112        Inactive        Active
23415312        Inactive        Active
Run Code Online (Sandbox Code Playgroud)

根据要求,在while循环内,我想使用剪切第一列的数据并打印它-

以下是部分代码-

......
......
    while read line
    do  
        SN=`echo ${line}|cut -d '       ' -f1`
        echo $SN
    done < input.txt
....
....
Run Code Online (Sandbox Code Playgroud)

要将制表符用作上面的分隔符,我正在使用 Ctrl V Tab

但输出并不如预期。我得到 O/P-

23776112 Inactive Active
23415312 Inactive Active
Run Code Online (Sandbox Code Playgroud)

而我想要 O/P 之类的 -

23776112 
23415312
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 13

cut -f 1 input.txt
Run Code Online (Sandbox Code Playgroud)

这为您提供了制表符分隔文件中的第一列input.txt。的默认字段分隔符cut是制表符,因此无需进一步指定。

如果分隔符实际上是一个空格,请使用

cut -d ' ' -f 1 input.txt
Run Code Online (Sandbox Code Playgroud)

如果事实证明有多个制表符和/或空格,请使用awk

awk '{ print $1 }' input.txt
Run Code Online (Sandbox Code Playgroud)

此操作不需要 shell 循环,无论您使用cutawk.

另请参阅“为什么使用 shell 循环处理文本被认为是不好的做法? ”。


您的脚本不起作用的原因是因为当您echo使用未加引号的变量时,选项卡会消失。

有关的: