我有一个文件,我想从中检索第一列,并在每个值之间添加一个逗号。
示例:
AAAA 12345 xccvbn
BBBB 43431 fkodks
CCCC 51234 plafad
获取
AAAA,BBBB,CCCC
我决定使用awk,所以我做了
awk '{ $1=$1","; print $1 }'
问题是:这也在最后一个值上添加了一个逗号,这不是我想要实现的,而且我在值之间得到一个空格。
如何删除最后一个元素上的逗号,如何删除空格?花了20分钟看完手册没有运气。
答案 0 :(得分:11)
$ awk '{printf "%s%s",sep,$1; sep=","} END{print ""}' file
AAAA,BBBB,CCCC
或者如果您愿意:
$ awk '{printf "%s%s",(NR>1?",":""),$1} END{print ""}' file
AAAA,BBBB,CCCC
或者如果你喜欢打高尔夫球并且不介意它对于大型文件来说效率低下:
$ awk '{r=r s $1;s=","} END{print r}' file
AAAA,BBBB,CCCC
答案 1 :(得分:2)
为什么让它变得复杂:)(只要文件不是太大)
awk '{a=NR==1?$1:a","$1} END {print a}' file
AAAA,BBBB,CCCC
为了更好的灵活性。
awk '{a=(NR>1?a",":"")$1} END {print a}' file
答案 2 :(得分:1)
awk 'NR==1{printf "%s",$1;next;}{printf "%s%s",",",$1;}' input.txt
它说:如果它是第一行只打印第一个字段,对于其他行首先打印,
然后打印第一个字段。
输出:
AAAA,BBBB,CCCC
答案 3 :(得分:1)
在这种情况下,作为简单的剪切和粘贴解决方案
cut -d" " -f1 file | paste -s -d,
答案 4 :(得分:1)
awk {'print $1","$2","$3'} file_name
这是我所知道的最短的
答案 5 :(得分:0)
你可以这样做:
awk 'a++{printf ","}{printf "%s", $1}' file
a ++被解释为一种条件。在第一行中,其值为0,因此不会添加逗号。
编辑:
如果您需要换行符,则必须添加END{printf "\n"}
。如果您在阅读文件时遇到问题,也可以尝试:
cat file | awk 'a++{printf ","}{printf "%s", $1}'
答案 6 :(得分:0)
如果我这样的人想要使用awk清理docker映像:
docker image ls | grep tag_name | awk '{print $1":"$2}'
答案 7 :(得分:0)
使用Perl
$ cat group_col.txt
AAAA 12345 xccvbn
BBBB 43431 fkodks
CCCC 51234 plafad
$ perl -lane ' push(@x,$F[0]); END { print join(",",@x) } ' group_col.txt
AAAA,BBBB,CCCC
$
答案 8 :(得分:0)
这可能非常简单,如下所示:
awk -F',' '{print $1","$1","$2","$3}' inputFile
其中输入文件为:1,2,3
2,3,4
等。
答案 9 :(得分:0)
对没有人使用OFS(输出字段分隔符)感到惊讶。这可能是坚持使用awk并在Linux和Mac上运行的最简单的解决方案:使用“ -v OFS =”以逗号作为分隔符输出:
$ echo'1:2:3:4'| awk -F:-v OFS =,“ {print $ 1,$ 2,$ 4,$ 3}”生成: 1,2,4,3
它也适用于多个字符: $ echo'1:2:3:4'| awk -F:-v OFS =。,'{print $ 1,$ 2,$ 4,$ 3}'输出: 1.,2.,4.,3
答案 10 :(得分:0)
我使用了以下内容,因为它列出了 api-resource 名称,如果您想直接访问它,这很有用。我还使用标签“应用程序”来查找命名空间中的特定应用程序:
kubectl -n ops-tools get $(kubectl api-resources --no-headers=true --sort-by=name | awk '{printf "%s%s",sep,$1; sep=","}') -l app.kubernetes.io/instance=application