ubuntu 使用awk创建第一行作为标题

uqcuzwp8  于 2023-04-20  发布在  其他
关注(0)|答案(2)|浏览(101)

以前我使用kali linux来编写我的bash文件,所以命令没有问题,但是自从我使用ubuntu之后,我意识到它在ubuntu上不工作,并且还没有找到任何解决这个问题的方法。

Ori Code

tr ':' '\t' < venue.txt | tr ' ' '_____" | awk -F "\t\ '$1=Name {print $2,$3,$4,$5,$6}' Name=$Name | column -t --table-columns "Number:", "Type:", "Capacity:" , "Status:" | tr '_____' ' '

venue.txt

B:B01:Random:6:This is a long message
C:C01:Lab:5:This is message

我希望输出像这样,不使用column --table-columns,因为Ubuntu不支持它,最好是awk

(When name==b, output be like)
Number     Type      Capacity      Status
 B01       Random        6         This is a long message
fdbelqdn

fdbelqdn1#

密码:

tr ':' '\t' < venue.txt |
tr ' ' '_____" |
awk -F "\t\ '$1=Name {print $2,$3,$4,$5,$6}' Name=$Name |
column -t --table-columns "Number:", "Type:", "Capacity:" , "Status:" |
tr '_____' ' '
  • tr不需要;awk-F
  • 第二个tr命令有一个双引号("),而应该有一个单引号,所以整个命令的含义发生了变化(awk命令变成了tr的额外参数-这会给予语法错误)。这是tr ' ' '_____'的拼写错误吗?
  • tr 'x' 'yyyyy' == tr 'x' 'y'
  • awk -F "\t\ '...是否为awk -F '\t' '...的排印错误?
  • $1=Name将变量Name的值赋给第一个字段。也许你想比较(==)?
  • $6将始终为空,因为venue.txt只有5个字段
  • tr 'xxxxx' 'y' == tr 'xxxxx' 'yyyyy' == tr 'x' 'y'

如果您尝试打印venue.txt中的记录,其第一列等于bash变量Name的值,而不打印名称本身,并将:分隔符转换为制表符并向输出添加标题行,则可以使用单个awk命令完成所有操作:

awk -F: -v OFS='\t' '
    BEGIN { print "Number","Type","Capacity","Status" }
    $1==Name { print $2,$3,$4,$5 }
' Name="$Name" venue.txt

使用awk来对齐列并不难,但它需要两遍,并且比使用column更费力:

awk -F: -v OFS=: '
    BEGIN { print "Number","Type","Capacity","Status" }
    $1==Name { print $2,$3,$4,$5 }
' Name="$Name" venue.txt | column -t -s:
ej83mcc0

ej83mcc02#

在用了这个之后不知怎么就做到了

tr ':' '\t' < venue.txt | tr ' ' '_____" | awk -F "\t" 'BEGIN {printf("%-4s %-1s %-3s %s %s\n" "Number:", "Type:", "Capacity:" , "Status:")}; %$1=Name {print $2,$3,$4,$5}' Name=$Name | column -t | tr '_____' ' '

相关问题