使用 awk 均匀地标记打印的字段
Tabbing the printed fields evenly using awk
我需要使用 awk 的帮助。谢谢
我有一个包含以下内容的文件
text.txt
The Hunger Games:Suzanne Collins:1:2:3
Weapon X:Stan Lee:3:4:5
我用来打印线条的代码
awk -F '[:]' '{print , ,"$", , }' BookDB.txt
希望输出变成这样
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
试试这个来获取制表符间距,如您的示例所示:
awk -F: '{if(NR==2)="\t";print , , , , }' OFS="\t" BookDB.txt
将 :
设置为字段分隔符,将 \t
设置为输出字段分隔符。然后对于第二行 (NR==2)
,为第二个字段添加 one extra tab
。然后打印字段。
或者更简单(如果你能接受的话):
sed "s/:/\t/g" BookDB.txt
您可以像这样将 awk 输出通过管道传输到 column
:
awk -F ':' -v OFS=':' '{print , , , , }' BookDB.txt | column -s ':' -t
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
您显示的输出不是制表符分隔的,它的格式为 table,为此您只需要:
$ 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 , }' 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
我需要使用 awk 的帮助。谢谢
我有一个包含以下内容的文件
text.txt
The Hunger Games:Suzanne Collins:1:2:3
Weapon X:Stan Lee:3:4:5
我用来打印线条的代码
awk -F '[:]' '{print , ,"$", , }' BookDB.txt
希望输出变成这样
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
试试这个来获取制表符间距,如您的示例所示:
awk -F: '{if(NR==2)="\t";print , , , , }' OFS="\t" BookDB.txt
将 :
设置为字段分隔符,将 \t
设置为输出字段分隔符。然后对于第二行 (NR==2)
,为第二个字段添加 one extra tab
。然后打印字段。
或者更简单(如果你能接受的话):
sed "s/:/\t/g" BookDB.txt
您可以像这样将 awk 输出通过管道传输到 column
:
awk -F ':' -v OFS=':' '{print , , , , }' BookDB.txt | column -s ':' -t
The Hunger Games Suzanne Collins 1 2 3
Weapon X Stan Lee 3 4 5
您显示的输出不是制表符分隔的,它的格式为 table,为此您只需要:
$ 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 , }' 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