Awk - 如何更改最后一个字段的格式并保持其他字段的格式相同
Awk - How to change format of the last field and keep the format same for other fields
data="blue yellow red white foo.bar.com,foo.bar.eu"
echo $data | awk '{printf "%-10s %-10s\n", , }'
给我以下输出:
blue foo.bar.com,foo.bar.eu
我希望输出如下所示,方法是用换行符替换最后一个字段中的逗号并对齐最后一个字段,如下所示。
blue foo.bar.com
foo.bar.eu
取决于您所说的“对齐”(制表符分隔或视觉表格)的含义:
$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/'
blue foo.bar.com
foo.bar.eu
$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print , ORS "", }'
blue foo.bar.com
foo.bar.eu
$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/' | column -s$'\t' -t
blue foo.bar.com
foo.bar.eu
$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print , ORS "", }' | column -s$'\t' -t
blue foo.bar.com
foo.bar.eu
使用sed
$ sed 's/\([^ ]*\).* \([a-z]*\.[a-z]*\.[a-z]*\),\(.*\)/\t\n\t/' input_file
blue foo.bar.com
foo.bar.eu
我只想在字段分隔符中添加逗号:
echo "blue yellow red white foo.bar.com,foo.bar.eu" |
awk -F '[[:blank:],]+' '{printf ("%-10s %s\n%-10s %s\n", , , "", )}'
# gives
blue foo.bar.com
foo.bar.eu
%-10s
表示让这个字符串至少有 10 个字符宽,必要时用 space 填充。 -
表示将字符串对齐到填充的 space 的左侧(而不是右侧)。
- 你不应该这样做
%-10s\n
- 这会在新行之前创建填充。
- 要使第二行与第一行相同,可以使用空字符串。
这可能是您想要的:
echo "blue yellow red white foo.bar.com,foo.bar.eu,foo.baz.com" |
awk '{
n=split(, a, ",")
printf "%-10s %-10s\n", , a[1]
for (i=2; i<=n; ++i) printf "%10s %-10s\n", "", a[i];
}'
输出:
blue foo.bar.com
foo.bar.eu
foo.baz.com
data="blue yellow red white foo.bar.com,foo.bar.eu"
echo $data | awk '{printf "%-10s %-10s\n", , }'
给我以下输出:
blue foo.bar.com,foo.bar.eu
我希望输出如下所示,方法是用换行符替换最后一个字段中的逗号并对齐最后一个字段,如下所示。
blue foo.bar.com
foo.bar.eu
取决于您所说的“对齐”(制表符分隔或视觉表格)的含义:
$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/'
blue foo.bar.com
foo.bar.eu
$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print , ORS "", }'
blue foo.bar.com
foo.bar.eu
$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/' | column -s$'\t' -t
blue foo.bar.com
foo.bar.eu
$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print , ORS "", }' | column -s$'\t' -t
blue foo.bar.com
foo.bar.eu
使用sed
$ sed 's/\([^ ]*\).* \([a-z]*\.[a-z]*\.[a-z]*\),\(.*\)/\t\n\t/' input_file
blue foo.bar.com
foo.bar.eu
我只想在字段分隔符中添加逗号:
echo "blue yellow red white foo.bar.com,foo.bar.eu" |
awk -F '[[:blank:],]+' '{printf ("%-10s %s\n%-10s %s\n", , , "", )}'
# gives
blue foo.bar.com
foo.bar.eu
%-10s
表示让这个字符串至少有 10 个字符宽,必要时用 space 填充。-
表示将字符串对齐到填充的 space 的左侧(而不是右侧)。- 你不应该这样做
%-10s\n
- 这会在新行之前创建填充。 - 要使第二行与第一行相同,可以使用空字符串。
这可能是您想要的:
echo "blue yellow red white foo.bar.com,foo.bar.eu,foo.baz.com" |
awk '{
n=split(, a, ",")
printf "%-10s %-10s\n", , a[1]
for (i=2; i<=n; ++i) printf "%10s %-10s\n", "", a[i];
}'
输出:
blue foo.bar.com
foo.bar.eu
foo.baz.com