为了账号安全,请及时绑定邮箱和手机立即绑定

如何使“ cut”命令将顺序分隔符视为相同?

/ 猿问

如何使“ cut”命令将顺序分隔符视为相同?

慕姐8265434 2019-11-22 14:35:37

我正在尝试从基于列的“空间”调整后的文本流中提取某个(第四个)字段。我试图以cut以下方式使用命令:


cat text.txt | cut -d " " -f 4


不幸的是,cut没有将多个空格视为一个定界符。我本来可以通过awk


awk '{ printf $4; }'


或sed


sed  -E "s/[[:space:]]+/ /g"


折叠空间,但我想知道是否有任何方法可以处理,cut并且本机有几个定界符?


查看完整描述

3 回答

?
慕森卡

尝试:


tr -s ' ' <text.txt | cut -d ' ' -f4

从tr手册页:


-s,--squeeze-repeats替换重复字符的每个输入序列

                        在SET1中列出一次


查看完整回答
反对 回复 2019-11-22
?
慕丝7291255

当您在问题中发表评论时,awk确实是要走的路。要使用cut是可能的共同tr -s挤压的空间,如千电子伏的答案节目。


但是,让我为将来的读者介绍所有可能的组合。说明在“测试”部分。


tr | 切

tr -s ' ' < file | cut -d' ' -f4

awk

awk '{print $4}' file

重击

while read -r _ _ _ myfield _

do

   echo "forth field: $myfield"

done < file

sed

sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file

测验

给定此文件,让我们测试命令:


$ cat a

this   is    line     1 more text

this      is line    2     more text

this    is line 3     more text

this is   line 4            more    text

tr | 切

$ cut -d' ' -f4 a

is

                        # it does not show what we want!



$ tr -s ' ' < a | cut -d' ' -f4

1

2                       # this makes it!

3

4

$

awk

$ awk '{print $4}' a

1

2

3

4

重击

这将顺序读取字段。通过使用,_我们指示这是一个抛弃型变量,可以作为忽略这些字段的“垃圾变量”。这样,$myfield无论它们之间是否有空格,我们都将其存储为文件中的第四个字段。


$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a

4th field: 1

4th field: 2

4th field: 3

4th field: 4

sed

这捕获了三组空格,没有空格([^ ]*[ ]*){3}。然后,它捕获到到第四个字段为止的所有内容,最后用来打印\1。


$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a

1

2

3

4


查看完整回答
反对 回复 2019-11-22
?
慕莱坞5435954

最短/最友好的解决方案

在对太多的限制感到沮丧之后cut,我写了我自己的替代品,我呼吁cuts“削减类固醇”。


cuts为解决此问题以及许多其他相关的cut / paste问题提供了最简约的解决方案。


一个例子,解决了这个特定问题:


$ cat text.txt

0   1        2 3

0 1          2   3 4


$ cuts 2 text.txt

2

2

cuts 支持:


自动检测文件中最常见的字段分隔符(具有覆盖默认值的功能)

多字符,混合字符和正则表达式匹配的分隔符

使用混合定界符从多个文件中提取列

从行尾到行尾的偏移量(使用负数)

自动并排粘贴列(无需paste单独调用)

支持字段重新排序

一个配置文件,用户可以在其中更改其个人偏好

高度重视用户友好性和简约的键入要求

以及更多。这些都不是标准提供的cut。


另请参阅:https : //stackoverflow.com/a/24543231/1296044


来源和文档(免费软件):http : //arielf.github.io/cuts/


查看完整回答
反对 回复 2019-11-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信