如何在Bash Shell中将一列拆分为两列

lnvxswe2  于 2022-10-23  发布在  Shell
关注(0)|答案(2)|浏览(428)

我有一个很大的文件,有很多栏。我想在1列中计算每个值出现的次数。因此,我使用cut -f 2 "file" | sort | uniq -c。我得到了我想要的结果。然而,当我将该文件读到R时,它显示我只有1列,但数据如下例所示:

123 Chelsea
65 Liverpool
77 Manchester city
2 Brentford

我想要的是两列,一列是计数,另一列是名字。然而,我只有一张。谁能帮我把这一列一分为二,或者用更好的方法从大文件中提取出来?
提前感谢!

h79rfbju

h79rfbju1#

这不是一个很好的解决方案,但试试这个。将上一条命令的输出通过管道传输到下面的While循环:

"your program" | while read count city
 do
 printf "%20s\t%s" $count $city
 done
ht4b089n

ht4b089n2#

如果您想简单地计算每列中的唯一示例,那么最好的选择是使用带有自定义分隔符的cut命令。例如,它将是空格分隔符。
在这种情况下,您必须考虑在第一个空格之后还有后续空格,例如Manchester city
因此,为了计算第一列的唯一出现次数:

cut -d ' ' -f1 <your_file> | uniq | wc -l

其中,-d将分隔符设置为空白' '-f1提供第一列;uniq保留唯一示例,wc -l计算出现的次数。
同样,要计算第二列的唯一出现次数:

cut -d ' ' -f2- <your_file> | uniq | wc -l

其中,除了-f2-之外,所有参数/命令都相同,-f2-允许您从第二列到最后一列获取(请参见cutman page-f<from>-<to>)。

编辑

根据您的问题的更新,这里有一个关于如何在r中获得您想要的东西的建议:
您可以将cutpipe一起使用:

df = read.csv(pipe("cut -f1,2- -d ' ' <your_csv_file>"))

这应该会返回一个 Dataframe ,其中的数据可以按您所希望的方式分隔。

相关问题