我需要使用awk的帮助。感谢
我有一个包含以下内容的文件
text.txt
The Hunger Games:Suzanne Collins:1:2:3
Weapon X:Stan Lee:3:4:5
我用来打印行的代码
awk -F '[:]' '{print $1, $2 ,"$"$3, $4 , $5 }' BookDB.txt
我希望外线变得像这样
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
答案 0 :(得分:1)
您可以将awk输出管道输出到column
,如下所示:
awk -F ':' -v OFS=':' '{print $1, $2 , $3, $4 , $5}' BookDB.txt | column -s ':' -t
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
答案 1 :(得分:1)
您显示的输出不是以制表符分隔的,而是将其格式化为表格,为此您只需要:
$ column -t -s: file
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
如果你真的希望它以制表符分隔,那就是:
$ tr ':' '\t' < file
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
如果您想要特定字段:
$ cut -d':' -f 1,4 file | column -t -s:
The Hunger Games 2
Weapon X 4
$ cut -d':' -f 1,4 file | tr ':' '\t'
The Hunger Games 2
Weapon X 4
$ awk -F':' -v OFS='\t' '{print $1, $4}' file
The Hunger Games 2
Weapon X 4
如果您没有column
但需要表格输出,则可以在awk中完成所有操作:
$ cat tst.awk
BEGIN { FS = ":"; ARGV[ARGC] = ARGV[ARGC-1]; ARGC++ }
{
for (i=1; i<=NF; i++)
if (NR==FNR)
width[i] = (length($i) > width[i] ? length($i) : width[i])
else
printf "%-*s%s", width[i], $i, (i<NF?OFS:ORS)
}
$ awk -f tst.awk file
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
答案 2 :(得分:0)
尝试使用此选项来获取标签间距:如示例所示:
awk -F: '{if(NR==2)$2="\t"$2;print $1, $2, $3, $4, $5}' OFS="\t" BookDB.txt
将:
设置为字段分隔符,将\t
设置为输出字段分隔符。然后,对于第二行(NR==2)
,为第二个字段添加one extra tab
。然后打印字段。
甚至更简单(如果您可以接受):
sed "s/:/\t/g" BookDB.txt